mirror of git://gcc.gnu.org/git/gcc.git
[gcc/objc/ChangeLog] 2004-12-15 Ziemowit Laski <zlaski@apple.com> * objc-act.c (build_private_template): Change to return 'void'; do not set ivar_context, uprivate_record or objc_instance_type. (objc_comptypes, gen_type_name_0): For types 'id' and 'Class', retrieve protocol list from the pointee rather than the pointer itself; check TYPE_HAS_OBJC_INFO(...) precondition before accessing TYPE_OBJC_PROTOCOL_LIST. (objc_get_protocol_qualified_type): For types 'id' and 'Class', construct a variant of the pointee as well as the pointer, and store protocol information in the former. When creating variants of RECORD_TYPEs, clone their TYPE_LANG_SPECIFIC fields and propagate TYPE_OBJC_INTERFACE information. (objc_declare_class): If a TYPE_DECL is looked up, retrieve the underlying RECORD_TYPE to check for presence of TYPE_OBJC_INTERFACE; for newly-created RECORD_TYPEs, create a tentative TYPE_OBJC_INTERFACE holding an IDENTIFIER_NODE. (objc_finish_message_expr): Check TYPE_HAS_OBJC_INFO(...) before accessing TYPE_OBJC_PROTOCOL_LIST; Use TYPE_OBJC_INTERFACE instead of calling lookup_interface(); allow for TYPE_OBJC_INTERFACE holding an IDENTIFIER_NODE (meaning a @class forward-declaration only). (objc_is_public): Check TYPE_OBJC_INTERFACE instead of calling lookup_interface(). (continue_class): For @implementations, set ivar_context, uprivate_record and objc_instance_type, for @interfaces, call build_private_template(). (encode_pointer): Check TYPE_HAS_OBJC_INFO(...) before accessing TYPE_OBJC_INTERFACE. (objc_types_are_equivalent): Check TYPE_HAS_OBJC_INFO(...) before accessing TYPE_OBJC_PROTOCOL_LIST. * objc-act.h (OBJC_INFO_SLOT_ELTS, TYPE_OBJC_INFO, INIT_TYPE_OBJC_INFO, DUP_TYPE_OBJC_INFO, ALLOC_OBJC_TYPE_LANG_SPECIFIC, SIZEOF_OBJC_TYPE_LANG_SPECIFIC): New macros. (TYPE_OBJC_INTERFACE): Replaces TREE_STATIC_INSTANCE and now points to an actual @interface; stored in TYPE_LANG_SPECIFIC(...). (TYPE_OBJC_PROTOCOL_LIST): Replaces TYPE_PROTOCOL_LIST; stored in TYPE_LANG_SPECIFIC(...). (TREE_STATIC_INSTANCE, TYPE_PROTOCOL_LIST): Delete. (IS_ID, IS_CLASS, IS_PROTOCOL_QUALIFIED_UNTYPED, IS_SUPER, TYPED_OBJECT): Check for POINTER_TYPE rather than POINTER_TYPE_P; adjust for use of TYPE_OBJC_INTERFACE and TYPE_OBJC_PROTOCOL_LIST instead of TREE_STATIC_INSTANCE and TYPE_PROTOCOL_LIST. From-SVN: r92239 |
||
|---|---|---|
| .. | ||
| ChangeLog | ||
| Make-lang.in | ||
| README | ||
| config-lang.in | ||
| lang-specs.h | ||
| objc-act.c | ||
| objc-act.h | ||
| objc-lang.c | ||
| objc-tree.def | ||
README
GNU Objective C notes ********************* This document is to explain what has been done, and a little about how specific features differ from other implementations. The runtime has been completely rewritten in gcc 2.4. The earlier runtime had several severe bugs and was rather incomplete. The compiler has had several new features added as well. This is not documentation for Objective C, it is usable to someone who knows Objective C from somewhere else. Runtime API functions ===================== The runtime is modeled after the NeXT Objective C runtime. That is, most functions have semantics as it is known from the NeXT. The names, however, have changed. All runtime API functions have names of lowercase letters and underscores as opposed to the `traditional' mixed case names. The runtime api functions are not documented as of now. Someone offered to write it, and did it, but we were not allowed to use it by his university (Very sad story). We have started writing the documentation over again. This will be announced in appropriate places when it becomes available. Protocols ========= Protocols are now fully supported. The semantics is exactly as on the NeXT. There is a flag to specify how protocols should be typechecked when adopted to classes. The normal typechecker requires that all methods in a given protocol must be implemented in the class that adopts it -- it is not enough to inherit them. The flag `-Wno-protocol' causes it to allow inherited methods, while `-Wprotocols' is the default which requires them defined. +initialize =========== This method, if defined, is called before any other instance or class methods of that particular class. This method is not inherited, and is thus not called as initializer for a subclass that doesn't define it itself. Thus, each +initialize method is called exactly once (or never if no methods of that particular class is never called). Besides this, it is allowed to have several +initialize methods, one for each category. The order in which these (multiple methods) are called is not well defined. I am not completely certain what the semantics of this method is for other implementations, but this is how it works for GNU Objective C. Passivation/Activation/Typedstreams =================================== This is supported in the style of NeXT TypedStream's. Consult the headerfile Typedstreams.h for api functions. I (Kresten) have rewritten it in Objective C, but this implementation is not part of 2.4, it is available from the GNU Objective C prerelease archive. There is one difference worth noting concerning objects stored with objc_write_object_reference (aka NXWriteObjectReference). When these are read back in, their object is not guaranteed to be available until the `-awake' method is called in the object that requests that object. To objc_read_object you must pass a pointer to an id, which is valid after exit from the function calling it (like e.g. an instance variable). In general, you should not use objects read in until the -awake method is called. Acknowledgements ================ The GNU Objective C team: Geoffrey Knauth <gsk@marble.com> (manager), Tom Wood <wood@next.com> (compiler) and Kresten Krab Thorup <krab@iesd.auc.dk> (runtime) would like to thank a some people for participating in the development of the present GNU Objective C. Paul Burchard <burchard@geom.umn.edu> and Andrew McCallum <mccallum@cs.rochester.edu> has been very helpful debugging the runtime. Eric Herring <herring@iesd.auc.dk> has been very helpful cleaning up after the documentation-copyright disaster and is now helping with the new documentation. Steve Naroff <snaroff@next.com> and Richard Stallman <rms@gnu.ai.mit.edu> has been very helpful with implementation details in the compiler. Bug Reports =========== Please read the section `Submitting Bugreports' of the gcc manual before you submit any bugs.