aboutsummaryrefslogtreecommitdiff
path: root/libobjc
diff options
context:
space:
mode:
authorNicola Pero <nicola.pero@meta-innovation.com>2010-12-24 18:41:05 +0000
committerNicola Pero <nicola@gcc.gnu.org>2010-12-24 18:41:05 +0000
commit410644c41a1b10798a0fe442c66f9bf582ecf067 (patch)
tree7562e7cd285a7a06e30ffabe52c2cf473a57ab9c /libobjc
parent5750872c618185a2f1161d24510ad2be8669338a (diff)
In libobjc/: 2010-12-24 Nicola Pero <nicola.pero@meta-innovation.com>
In libobjc/: 2010-12-24 Nicola Pero <nicola.pero@meta-innovation.com> * objc/runtime.h (class_addIvar): Updated documentation. The alignment is actually the log_2 of the alignment in bytes. * ivars.c (class_addIvar): Corresponding change to the implementation. In gcc/testsuite/: 2010-12-24 Nicola Pero <nicola.pero@meta-innovation.com> * objc.dg/gnu-api-2-class.m: Updated test to pass log_2 of the alignment to class_addIvar, instead of the alignment itself. * obj-c++.dg/gnu-api-2-class.mm: Same change. From-SVN: r168230
Diffstat (limited to 'libobjc')
-rw-r--r--libobjc/ChangeLog7
-rw-r--r--libobjc/ivars.c3
-rw-r--r--libobjc/objc/runtime.h20
3 files changed, 20 insertions, 10 deletions
diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog
index e028b58fc23..d8f23f74c9a 100644
--- a/libobjc/ChangeLog
+++ b/libobjc/ChangeLog
@@ -1,5 +1,12 @@
2010-12-24 Nicola Pero <nicola.pero@meta-innovation.com>
+ * objc/runtime.h (class_addIvar): Updated documentation. The
+ alignment is actually the log_2 of the alignment in bytes.
+ * ivars.c (class_addIvar): Corresponding change to the
+ implementation.
+
+2010-12-24 Nicola Pero <nicola.pero@meta-innovation.com>
+
* objc/runtime.h (sel_getType): Renamed to sel_getTypeEncoding to
be consistent with method_getTypeEncoding and
ivar_getTypeEncoding.
diff --git a/libobjc/ivars.c b/libobjc/ivars.c
index 7527df804d2..6111a03ea16 100644
--- a/libobjc/ivars.c
+++ b/libobjc/ivars.c
@@ -212,7 +212,7 @@ struct objc_ivar ** class_copyIvarList (Class class_, unsigned int *numberOfRetu
BOOL
class_addIvar (Class class_, const char * ivar_name, size_t size,
- unsigned char alignment, const char *type)
+ unsigned char log_2_of_alignment, const char *type)
{
struct objc_ivar_list *ivars;
@@ -270,6 +270,7 @@ class_addIvar (Class class_, const char * ivar_name, size_t size,
size. */
{
struct objc_ivar *ivar = &(ivars->ivar_list[ivars->ivar_count - 1]);
+ unsigned int alignment = 1 << log_2_of_alignment;
int misalignment;
ivar->ivar_name = objc_malloc (strlen (ivar_name) + 1);
diff --git a/libobjc/objc/runtime.h b/libobjc/objc/runtime.h
index 18fc8726dc4..9332f7be069 100644
--- a/libobjc/objc/runtime.h
+++ b/libobjc/objc/runtime.h
@@ -352,14 +352,16 @@ objc_EXPORT Ivar * class_copyIvarList (Class class_, unsigned int *numberOfRetur
using objc_allocateClassPair() and has not been registered with the
runtime using objc_registerClassPair() yet. You can not add
instance variables to classes already registered with the runtime.
- 'size' is the size of the instance variable, 'alignment' the
- alignment, and 'type' the type encoding of the variable type. You
- can use sizeof(), __alignof__() and @encode() to determine the
- right 'size', 'alignment' and 'type' for your instance variable.
- For example, to add an instance variable name "my_variable" and of
- type 'id', you can use:
-
- class_addIvar (class, "my_variable", sizeof (id), __alignof__ (id),
+ 'size' is the size of the instance variable, 'log_2_of_alignment'
+ the alignment as a power of 2 (so 0 means alignment to a 1 byte
+ boundary, 1 means alignment to a 2 byte boundary, 2 means alignment
+ to a 4 byte boundary, etc), and 'type' the type encoding of the
+ variable type. You can use sizeof(), log2(__alignof__()) and
+ @encode() to determine the right 'size', 'alignment' and 'type' for
+ your instance variable. For example, to add an instance variable
+ name "my_variable" and of type 'id', you can use:
+
+ class_addIvar (class, "my_variable", sizeof (id), log2 ( __alignof__ (id)),
@encode (id));
Return YES if the variable was added, and NO if not. In
@@ -368,7 +370,7 @@ objc_EXPORT Ivar * class_copyIvarList (Class class_, unsigned int *numberOfRetur
'type' is NULL, or 'size' is 0.
*/
objc_EXPORT BOOL class_addIvar (Class class_, const char * ivar_name, size_t size,
- unsigned char alignment, const char *type);
+ unsigned char log_2_of_alignment, const char *type);
/* Return the name of the property. Return NULL if 'property' is
NULL. */