diff options
author | pinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-12-16 20:19:37 +0000 |
---|---|---|
committer | pinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-12-16 20:19:37 +0000 |
commit | 0ee579cd4e05beecb067353b73258e08fc0f914c (patch) | |
tree | 5624961b5cadba21d6c5047592828975c5ed7404 /libobjc | |
parent | 90eef04ee1cf1052052bb29c81781918d2e89ed3 (diff) | |
download | gcc-0ee579cd4e05beecb067353b73258e08fc0f914c.tar.gz |
2005-12-14 Andrew Pinski <pinskia@physics.uc.edu>
PR objc/25360
* objc/objc-act.c (encode_type): Encode Complex types as 'j' followed
by the inner type.
2005-12-14 Andrew Pinski <pinskia@physics.uc.edu>
PR objc/25360
* objc/objc-api.c (_C_COMPLEX): New define.
* encoding.c (objc_sizeof_type): Handle _C_Complex.
(objc_alignof_type): Likewise.
(objc_skip_typespec): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@108675 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libobjc')
-rw-r--r-- | libobjc/ChangeLog | 8 | ||||
-rw-r--r-- | libobjc/encoding.c | 129 | ||||
-rw-r--r-- | libobjc/objc/objc-api.h | 1 |
3 files changed, 138 insertions, 0 deletions
diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog index 3ac957d3baf..27378fbd79b 100644 --- a/libobjc/ChangeLog +++ b/libobjc/ChangeLog @@ -1,3 +1,11 @@ +2005-12-14 Andrew Pinski <pinskia@physics.uc.edu> + + PR objc/25360 + * objc/objc-api.c (_C_COMPLEX): New define. + * encoding.c (objc_sizeof_type): Handle _C_Complex. + (objc_alignof_type): Likewise. + (objc_skip_typespec): Likewise. + 2005-12-15 David Ayers <d.ayers@inode.at> PR libobjc/14382 diff --git a/libobjc/encoding.c b/libobjc/encoding.c index af6b93d4498..21a785814dc 100644 --- a/libobjc/encoding.c +++ b/libobjc/encoding.c @@ -248,6 +248,68 @@ objc_sizeof_type (const char *type) return size; } + + case _C_COMPLEX: + { + type++; /* Skip after the 'j'. */ + switch (*type) + { + case _C_CHR: + return sizeof (_Complex char); + break; + + case _C_UCHR: + return sizeof (_Complex unsigned char); + break; + + case _C_SHT: + return sizeof (_Complex short); + break; + + case _C_USHT: + return sizeof (_Complex unsigned short); + break; + + case _C_INT: + return sizeof (_Complex int); + break; + + case _C_UINT: + return sizeof (_Complex unsigned int); + break; + + case _C_LNG: + return sizeof (_Complex long); + break; + + case _C_ULNG: + return sizeof (_Complex unsigned long); + break; + + case _C_LNG_LNG: + return sizeof (_Complex long long); + break; + + case _C_ULNG_LNG: + return sizeof (_Complex unsigned long long); + break; + + case _C_FLT: + return sizeof (_Complex float); + break; + + case _C_DBL: + return sizeof (_Complex double); + break; + + default: + { + objc_error (nil, OBJC_ERR_BAD_TYPE, "unknown complex type %s\n", + type); + return 0; + } + } + } default: { @@ -360,6 +422,69 @@ objc_alignof_type (const char *type) return align; } + + + case _C_COMPLEX: + { + type++; /* Skip after the 'j'. */ + switch (*type) + { + case _C_CHR: + return __alignof__ (_Complex char); + break; + + case _C_UCHR: + return __alignof__ (_Complex unsigned char); + break; + + case _C_SHT: + return __alignof__ (_Complex short); + break; + + case _C_USHT: + return __alignof__ (_Complex unsigned short); + break; + + case _C_INT: + return __alignof__ (_Complex int); + break; + + case _C_UINT: + return __alignof__ (_Complex unsigned int); + break; + + case _C_LNG: + return __alignof__ (_Complex long); + break; + + case _C_ULNG: + return __alignof__ (_Complex unsigned long); + break; + + case _C_LNG_LNG: + return __alignof__ (_Complex long long); + break; + + case _C_ULNG_LNG: + return __alignof__ (_Complex unsigned long long); + break; + + case _C_FLT: + return __alignof__ (_Complex float); + break; + + case _C_DBL: + return __alignof__ (_Complex double); + break; + + default: + { + objc_error (nil, OBJC_ERR_BAD_TYPE, "unknown complex type %s\n", + type); + return 0; + } + } + } default: { @@ -491,6 +616,10 @@ objc_skip_typespec (const char *type) case _C_UNDEF: return ++type; break; + + case _C_COMPLEX: + return type + 2; + break; case _C_ARY_B: /* skip digits, typespec and closing ']' */ diff --git a/libobjc/objc/objc-api.h b/libobjc/objc/objc-api.h index e393c395219..e0e49e21fdf 100644 --- a/libobjc/objc/objc-api.h +++ b/libobjc/objc/objc-api.h @@ -82,6 +82,7 @@ struct objc_method_description #define _C_STRUCT_B '{' #define _C_STRUCT_E '}' #define _C_VECTOR '!' +#define _C_COMPLEX 'j' /* |