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
This commit is contained in:
Andrew Pinski 2005-12-16 20:19:37 +00:00 committed by Andrew Pinski
parent 184210e82c
commit 06b1145579
5 changed files with 150 additions and 0 deletions

View file

@ -1,3 +1,9 @@
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-12 Andrew Pinski <pinskia@physics.uc.edu>
PR objc/25348

View file

@ -8119,6 +8119,12 @@ encode_type (tree type, int curtype, int format)
else if (code == FUNCTION_TYPE) /* '?' */
obstack_1grow (&util_obstack, '?');
else if (code == COMPLEX_TYPE)
{
obstack_1grow (&util_obstack, 'j');
encode_type (TREE_TYPE (type), curtype, format);
}
}
static void

View file

@ -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

View file

@ -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 ']' */

View file

@ -82,6 +82,7 @@ struct objc_method_description
#define _C_STRUCT_B '{'
#define _C_STRUCT_E '}'
#define _C_VECTOR '!'
#define _C_COMPLEX 'j'
/*