aboutsummaryrefslogtreecommitdiff
path: root/gcc/doc/objc.texi
diff options
context:
space:
mode:
authorNicola Pero <n.pero@mi.flashnet.it>2002-09-17 13:51:40 +0200
committerNicola Pero <nicola@gcc.gnu.org>2002-09-17 11:51:40 +0000
commit838c4534d4aebb1efb7d968d289606d6f1c89374 (patch)
tree9a3f12ab1fb57b1832fa6ce6174c17e929461b69 /gcc/doc/objc.texi
parent17656182f77cf4634dad4bbff9102d759ffd03b2 (diff)
downloadgcc-838c4534d4aebb1efb7d968d289606d6f1c89374.zip
gcc-838c4534d4aebb1efb7d968d289606d6f1c89374.tar.gz
gcc-838c4534d4aebb1efb7d968d289606d6f1c89374.tar.bz2
Extended/updated objc documentation on constant string classes
From-SVN: r57247
Diffstat (limited to 'gcc/doc/objc.texi')
-rw-r--r--gcc/doc/objc.texi39
1 files changed, 28 insertions, 11 deletions
diff --git a/gcc/doc/objc.texi b/gcc/doc/objc.texi
index d3fd775..3b65255 100644
--- a/gcc/doc/objc.texi
+++ b/gcc/doc/objc.texi
@@ -396,7 +396,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 +409,9 @@ as @code{NXConstantString}'s structure:
@example
-@@interface NXConstantString : Object
+@@interface MyConstantStringClass
@{
+ Class isa;
char *c_string;
unsigned int len;
@}
@@ -418,15 +419,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 layour 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