aboutsummaryrefslogtreecommitdiff
path: root/libobjc
diff options
context:
space:
mode:
authorAndrew Pinski <pinskia@physics.uc.edu>2005-12-16 20:19:37 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2005-12-16 12:19:37 -0800
commit06b1145579432ef77e572b9538b68971146f0468 (patch)
tree5624961b5cadba21d6c5047592828975c5ed7404 /libobjc
parent184210e82c5572ee07f62fe342f42d38d20f54e6 (diff)
downloadgcc-06b1145579432ef77e572b9538b68971146f0468.zip
gcc-06b1145579432ef77e572b9538b68971146f0468.tar.gz
gcc-06b1145579432ef77e572b9538b68971146f0468.tar.bz2
re PR objc/25360 (Complex types are not encoded)
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. From-SVN: r108675
Diffstat (limited to 'libobjc')
-rw-r--r--libobjc/ChangeLog8
-rw-r--r--libobjc/encoding.c129
-rw-r--r--libobjc/objc/objc-api.h1
3 files changed, 138 insertions, 0 deletions
diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog
index 3ac957d..27378fb 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 af6b93d..21a7858 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 e393c39..e0e49e2 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'
/*