diff options
author | Nicola Pero <nicola.pero@meta-innovation.com> | 2010-12-24 18:41:05 +0000 |
---|---|---|
committer | Nicola Pero <nicola@gcc.gnu.org> | 2010-12-24 18:41:05 +0000 |
commit | 410644c41a1b10798a0fe442c66f9bf582ecf067 (patch) | |
tree | 7562e7cd285a7a06e30ffabe52c2cf473a57ab9c /libobjc | |
parent | 5750872c618185a2f1161d24510ad2be8669338a (diff) | |
download | gcc-410644c41a1b10798a0fe442c66f9bf582ecf067.zip gcc-410644c41a1b10798a0fe442c66f9bf582ecf067.tar.gz gcc-410644c41a1b10798a0fe442c66f9bf582ecf067.tar.bz2 |
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/ChangeLog | 7 | ||||
-rw-r--r-- | libobjc/ivars.c | 3 | ||||
-rw-r--r-- | libobjc/objc/runtime.h | 20 |
3 files changed, 20 insertions, 10 deletions
diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog index e028b58..d8f23f7 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 7527df8..6111a03 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 18fc872..9332f7b 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. */ |