summaryrefslogtreecommitdiffstats
path: root/contrib/gcc/doc/objc.texi
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/gcc/doc/objc.texi')
-rw-r--r--contrib/gcc/doc/objc.texi40
1 files changed, 28 insertions, 12 deletions
diff --git a/contrib/gcc/doc/objc.texi b/contrib/gcc/doc/objc.texi
index d3fd775..a0c40f7 100644
--- a/contrib/gcc/doc/objc.texi
+++ b/contrib/gcc/doc/objc.texi
@@ -25,7 +25,6 @@ comments about this document to Ovidiu Predescu
@node Executing code before main, Type encoding, Objective-C, Objective-C
@section @code{+load}: Executing code before main
-
The GNU Objective-C runtime provides a way that allows you to execute
code before the execution of the program enters the @code{main}
function. The code is executed on a per-class and a per-category basis,
@@ -396,7 +395,7 @@ prefixing a C constant string with the character @samp{@@}:
id myString = @@"this is a constant string object";
@end example
-The constant string objects are usually instances of the
+The constant string objects are by default instances of the
@code{NXConstantString} class which is provided by the GNU Objective-C
runtime. To get the definition of this class you must include the
@file{objc/NXConstStr.h} header file.
@@ -409,8 +408,9 @@ as @code{NXConstantString}'s structure:
@example
-@@interface NXConstantString : Object
+@@interface MyConstantStringClass
@{
+ Class isa;
char *c_string;
unsigned int len;
@}
@@ -418,15 +418,31 @@ as @code{NXConstantString}'s structure:
@end example
-User class libraries may choose to inherit the customized constant
-string class from a different class than @code{Object}. There is no
-requirement in the methods the constant string class has to implement.
-
-When a file is compiled with the @option{-fconstant-string-class} option,
-all the constant string objects will be instances of the class specified
-as argument to this option. It is possible to have multiple compilation
-units referring to different constant string classes, neither the
-compiler nor the linker impose any restrictions in doing this.
+@code{NXConstantString} inherits from @code{Object}; user class
+libraries may choose to inherit the customized constant string class
+from a different class than @code{Object}. There is no requirement in
+the methods the constant string class has to implement, but the final
+ivar layout of the class must be the compatible with the given
+structure.
+
+When the compiler creates the statically allocated constant string
+object, the @code{c_string} field will be filled by the compiler with
+the string; the @code{length} field will be filled by the compiler with
+the string length; the @code{isa} pointer will be filled with
+@code{NULL} by the compiler, and it will later be fixed up automatically
+at runtime by the GNU Objective-C runtime library to point to the class
+which was set by the @option{-fconstant-string-class} option when the
+object file is loaded (if you wonder how it works behind the scenes, the
+name of the class to use, and the list of static objects to fixup, are
+stored by the compiler in the object file in a place where the GNU
+runtime library will find them at runtime).
+
+As a result, when a file is compiled with the
+@option{-fconstant-string-class} option, all the constant string objects
+will be instances of the class specified as argument to this option. It
+is possible to have multiple compilation units referring to different
+constant string classes, neither the compiler nor the linker impose any
+restrictions in doing this.
@c =========================================================================
@node compatibility_alias
OpenPOWER on IntegriCloud