Commit 1501d094 by Nicola Pero Committed by Nicola Pero

In libobjc/: 2010-10-17 Nicola Pero <nicola.pero@meta-innovation.com>

In libobjc/:
2010-10-17  Nicola Pero  <nicola.pero@meta-innovation.com>

        * init.c (objc_send_load): Do not wait for NXConstantString to be
        registered before executing +load.  There is no point if
        -fconstant-string-class=xxx is used when compiling all modules,
        as is the case for almost all users.
        * linking.m (__objc_linking): Do not try to forcefully link in
        NXConstantString.

In gcc/:
2010-10-17  Nicola Pero  <nicola.pero@meta-innovation.com>

        * doc/objc.texi (What you can and what you cannot do in +load):
        Document that sending messages to constant string objects in +load
        is not guaranteed to work.

From-SVN: r165583
parent 368be4c7
2010-10-17 Nicola Pero <nicola.pero@meta-innovation.com>
* doc/objc.texi (What you can and what you cannot do in +load):
Document that sending messages to constant string objects in +load
is not guaranteed to work.
2010-10-16 Jan Hubicka <jh@suse.cz> 2010-10-16 Jan Hubicka <jh@suse.cz>
PR middle-end/44206 PR middle-end/44206
...@@ -107,8 +107,14 @@ instead of @code{+initialize}. ...@@ -107,8 +107,14 @@ instead of @code{+initialize}.
@node What you can and what you cannot do in +load @node What you can and what you cannot do in +load
@subsection What you can and what you cannot do in @code{+load} @subsection What you can and what you cannot do in @code{+load}
The @code{+load} implementation in the GNU runtime guarantees you the following @code{+load} is to be used only as a last resort. Because it is
things: executed very early, most of the Objective-C runtime machinery will
not be ready when @code{+load} is executed; hence @code{+load} works
best for executing C code that is independent on the Objective-C
runtime.
The @code{+load} implementation in the GNU runtime guarantees you the
following things:
@itemize @bullet @itemize @bullet
...@@ -116,15 +122,12 @@ things: ...@@ -116,15 +122,12 @@ things:
you can write whatever C code you like; you can write whatever C code you like;
@item @item
you can send messages to Objective-C constant strings (@code{@@"this is a
constant string"});
@item
you can allocate and send messages to objects whose class is implemented you can allocate and send messages to objects whose class is implemented
in the same file; in the same file;
@item @item
the @code{+load} implementation of all super classes of a class are executed before the @code{+load} of that class is executed; the @code{+load} implementation of all super classes of a class are
executed before the @code{+load} of that class is executed;
@item @item
the @code{+load} implementation of a class is executed before the the @code{+load} implementation of a class is executed before the
...@@ -144,6 +147,10 @@ allocation of or sending messages to arbitrary objects; ...@@ -144,6 +147,10 @@ allocation of or sending messages to arbitrary objects;
allocation of or sending messages to objects whose classes have a allocation of or sending messages to objects whose classes have a
category implemented in the same file; category implemented in the same file;
@item
sending messages to Objective-C constant strings (@code{@@"this is a
constant string"});
@end itemize @end itemize
You should make no assumptions about receiving @code{+load} in sibling You should make no assumptions about receiving @code{+load} in sibling
......
2010-10-17 Nicola Pero <nicola.pero@meta-innovation.com>
* init.c (objc_send_load): Do not wait for NXConstantString to be
registered before executing +load. There is no point if
-fconstant-string-class=xxx is used when compiling all modules,
as is the case for almost all users.
* linking.m (__objc_linking): Do not try to forcefully link in
NXConstantString.
2010-10-16 Nicola Pero <nicola.pero@meta-innovation.com> 2010-10-16 Nicola Pero <nicola.pero@meta-innovation.com>
* objc/runtime.h: Updated comments. * objc/runtime.h: Updated comments.
......
...@@ -444,8 +444,7 @@ class_is_subclass_of_class (Class class, Class superclass) ...@@ -444,8 +444,7 @@ class_is_subclass_of_class (Class class, Class superclass)
their superclasses are not yet known to the runtime. */ their superclasses are not yet known to the runtime. */
static struct objc_list *unresolved_classes = 0; static struct objc_list *unresolved_classes = 0;
/* Extern function used to reference the Object and NXConstantString /* Extern function used to reference the Object class. */
classes. */
extern void __objc_force_linking (void); extern void __objc_force_linking (void);
...@@ -755,11 +754,9 @@ objc_send_load (void) ...@@ -755,11 +754,9 @@ objc_send_load (void)
return; return;
} }
/* Special check to allow creating and sending messages to constant /* Special check. If 'Object', which is used by meta-classes, has
strings in +load methods. If these classes are not yet known, not been loaded yet, delay sending of +load. */
even if all the other classes are known, delay sending of +load. */ if (! objc_lookup_class ("Object"))
if (! objc_lookup_class ("NXConstantString") ||
! objc_lookup_class ("Object"))
return; return;
/* Iterate over all modules in the __objc_module_list and call on /* Iterate over all modules in the __objc_module_list and call on
......
...@@ -27,12 +27,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ...@@ -27,12 +27,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include <objc/Object.h> #include <objc/Object.h>
#include <objc/NXConstStr.h> #include <objc/NXConstStr.h>
/* Generate references to Object and NXConstanstString classes since they are /* Generate references to Object class since it is needed by the
needed by the runtime system to run correctly. */ runtime system to run correctly. */
void __objc_linking (void) void __objc_linking (void)
{ {
[Object name]; [Object name];
[NXConstantString name];
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment