Skip to content

Commit

Permalink
2005-12-14 Andrew Pinski <[email protected]>
Browse files Browse the repository at this point in the history
        PR objc/25360
        * objc/objc-act.c (encode_type): Encode Complex types as 'j' followed
        by the inner type.

2005-12-14  Andrew Pinski  <[email protected]>

        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
  • Loading branch information
pinskia committed Dec 16, 2005
1 parent 90eef04 commit 0ee579c
Show file tree
Hide file tree
Showing 5 changed files with 150 additions and 0 deletions.
6 changes: 6 additions & 0 deletions gcc/objc/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
2005-12-14 Andrew Pinski <[email protected]>

PR objc/25360
* objc/objc-act.c (encode_type): Encode Complex types as 'j' followed
by the inner type.

2005-12-12 Andrew Pinski <[email protected]>

PR objc/25348
Expand Down
6 changes: 6 additions & 0 deletions gcc/objc/objc-act.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 8 additions & 0 deletions libobjc/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
2005-12-14 Andrew Pinski <[email protected]>

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 <[email protected]>

PR libobjc/14382
Expand Down
129 changes: 129 additions & 0 deletions libobjc/encoding.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:
{
Expand Down Expand Up @@ -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:
{
Expand Down Expand Up @@ -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 ']' */
Expand Down
1 change: 1 addition & 0 deletions libobjc/objc/objc-api.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ struct objc_method_description
#define _C_STRUCT_B '{'
#define _C_STRUCT_E '}'
#define _C_VECTOR '!'
#define _C_COMPLEX 'j'


/*
Expand Down

0 comments on commit 0ee579c

Please sign in to comment.