Commit 06b11455 by Andrew Pinski Committed by Andrew Pinski

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
parent 184210e8
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
......
......@@ -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
......
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
......
......@@ -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 ']' */
......
......@@ -82,6 +82,7 @@ struct objc_method_description
#define _C_STRUCT_B '{'
#define _C_STRUCT_E '}'
#define _C_VECTOR '!'
#define _C_COMPLEX 'j'
/*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment