1998-09-21 03:22:07 +02:00
|
|
|
/* Encoding of types for Objective C.
|
2009-04-09 17:00:19 +02:00
|
|
|
Copyright (C) 1993, 1997, 2002, 2004, 2009 Free Software Foundation, Inc.
|
1998-09-21 03:22:07 +02:00
|
|
|
|
|
|
|
Author: Kresten Krab Thorup
|
|
|
|
|
Makefile.in, [...]: Replace "GNU CC" with "GCC".
2003-05-23 Nathanael Nerode <neroden@gcc.gnu.org>
* Makefile.in, NXConstStr.m, Object.m, Protocol.m, archive.c,
class.c, encoding.c, gc.c, objc/NXConstStr.h, objc/Object.h,
objc/Protocol.h, objc/encoding.h, objc/hash.h, objc/objc-api.h,
objc/objc-list.h, objc/objc.h, ocjc/runtime.h, objc/sarray.h,
objc/thr.h, objc/typedstream.h: Replace "GNU CC" with "GCC".
From-SVN: r67131
2003-05-23 22:04:58 +02:00
|
|
|
This file is part of GCC.
|
1998-09-21 03:22:07 +02:00
|
|
|
|
Makefile.in, [...]: Replace "GNU CC" with "GCC".
2003-05-23 Nathanael Nerode <neroden@gcc.gnu.org>
* Makefile.in, NXConstStr.m, Object.m, Protocol.m, archive.c,
class.c, encoding.c, gc.c, objc/NXConstStr.h, objc/Object.h,
objc/Protocol.h, objc/encoding.h, objc/hash.h, objc/objc-api.h,
objc/objc-list.h, objc/objc.h, ocjc/runtime.h, objc/sarray.h,
objc/thr.h, objc/typedstream.h: Replace "GNU CC" with "GCC".
From-SVN: r67131
2003-05-23 22:04:58 +02:00
|
|
|
GCC is free software; you can redistribute it and/or modify
|
1998-09-21 03:22:07 +02:00
|
|
|
it under the terms of the GNU General Public License as published by
|
2009-04-09 17:00:19 +02:00
|
|
|
the Free Software Foundation; either version 3, or (at your option)
|
1998-09-21 03:22:07 +02:00
|
|
|
any later version.
|
|
|
|
|
Makefile.in, [...]: Replace "GNU CC" with "GCC".
2003-05-23 Nathanael Nerode <neroden@gcc.gnu.org>
* Makefile.in, NXConstStr.m, Object.m, Protocol.m, archive.c,
class.c, encoding.c, gc.c, objc/NXConstStr.h, objc/Object.h,
objc/Protocol.h, objc/encoding.h, objc/hash.h, objc/objc-api.h,
objc/objc-list.h, objc/objc.h, ocjc/runtime.h, objc/sarray.h,
objc/thr.h, objc/typedstream.h: Replace "GNU CC" with "GCC".
From-SVN: r67131
2003-05-23 22:04:58 +02:00
|
|
|
GCC is distributed in the hope that it will be useful,
|
1998-09-21 03:22:07 +02:00
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
2009-04-09 17:00:19 +02:00
|
|
|
Under Section 7 of GPL version 3, you are granted additional
|
|
|
|
permissions described in the GCC Runtime Library Exception, version
|
|
|
|
3.1, as published by the Free Software Foundation.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License and
|
|
|
|
a copy of the GCC Runtime Library Exception along with this program;
|
|
|
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|
|
|
<http://www.gnu.org/licenses/>. */
|
1998-09-21 03:22:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
#ifndef __encoding_INCLUDE_GNU
|
|
|
|
#define __encoding_INCLUDE_GNU
|
|
|
|
|
In libobjc/: 2010-10-10 Nicola Pero <nicola.pero@meta-innovation.com>
In libobjc/:
2010-10-10 Nicola Pero <nicola.pero@meta-innovation.com>
* objc/objc-api.h: Define Method, Method_t, Category and
Category_t. Prevent including this file at the same time as
objc/runtime.h. Updated comments.
* objc/deprecated/struct_objc_method.h: Do not define Method,
Method_t.
* objc/deprecated/struct_objc_category.h: Do not define Category,
Category_t.
* objc-private/module-abi-8.h: New file containing a copy of all
the structure definitions. Not used yet.
* objc/encoding.h (objc_aligned_size): Removed duplicate
declaration. Updated comments.
* objc/runtime.h: Added Ivar, objc_property_t, Property, Method,
Category, struct objc_method_description, _C_ID and similar,
_C_CONST and similar and _F_CONST and similar. Added
objc_sizeof_type, objc_alignof_type, objc_aligned_size,
objc_promoted_size, objc_skip_type_qualifier, objc_skip_typespec,
objc_skip_offset, objc_skip_argspec, objc_get_type_qualifiers,
struct objc_struct_layout, objc_layout_structure,
objc_layout_structure_next_member, objc_layout_finish_structure,
objc_layout_structure_get_info. Prevent including this file at
the same time as objc/objc-api.h.
From-SVN: r165256
2010-10-10 19:43:07 +02:00
|
|
|
/* This file is to be used with the "traditional" GNU Objective-C
|
|
|
|
Runtime API (the one declared in objc/objc-api.h). If you are
|
|
|
|
using the "modern" GNU Objective-C Runtime API, then the useful
|
|
|
|
functions from this file are declared in objc/runtime.h.
|
|
|
|
*/
|
|
|
|
|
NXConstStr.h, [...]: Do not include Objective-C headers as system headers.
2005-06-08 David Ayers <d.ayers@inode.at>
* objc/NXConstStr.h, objc/Object.h, objc/Protocol.h,
objc/encoding.h, objc/hash.h, objc/objc-api.h,
objc/runtime.h, objc/sarray.h, objc/thr.h,
objc/typedstream.h: Do not include Objective-C headers as
system headers.
From-SVN: r100760
2005-06-08 17:13:17 +02:00
|
|
|
#include "objc-api.h"
|
2004-08-14 00:23:58 +02:00
|
|
|
#include <ctype.h>
|
1998-09-21 03:22:07 +02:00
|
|
|
|
2004-06-25 06:31:51 +02:00
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif /* __cplusplus */
|
|
|
|
|
In libobjc/: 2010-10-10 Nicola Pero <nicola.pero@meta-innovation.com>
In libobjc/:
2010-10-10 Nicola Pero <nicola.pero@meta-innovation.com>
* objc/objc-api.h: Define Method, Method_t, Category and
Category_t. Prevent including this file at the same time as
objc/runtime.h. Updated comments.
* objc/deprecated/struct_objc_method.h: Do not define Method,
Method_t.
* objc/deprecated/struct_objc_category.h: Do not define Category,
Category_t.
* objc-private/module-abi-8.h: New file containing a copy of all
the structure definitions. Not used yet.
* objc/encoding.h (objc_aligned_size): Removed duplicate
declaration. Updated comments.
* objc/runtime.h: Added Ivar, objc_property_t, Property, Method,
Category, struct objc_method_description, _C_ID and similar,
_C_CONST and similar and _F_CONST and similar. Added
objc_sizeof_type, objc_alignof_type, objc_aligned_size,
objc_promoted_size, objc_skip_type_qualifier, objc_skip_typespec,
objc_skip_offset, objc_skip_argspec, objc_get_type_qualifiers,
struct objc_struct_layout, objc_layout_structure,
objc_layout_structure_next_member, objc_layout_finish_structure,
objc_layout_structure_get_info. Prevent including this file at
the same time as objc/objc-api.h.
From-SVN: r165256
2010-10-10 19:43:07 +02:00
|
|
|
/* The following are used in encode strings to describe some
|
|
|
|
qualifiers of method and ivar types. */
|
1998-09-21 03:22:07 +02:00
|
|
|
#define _C_CONST 'r'
|
|
|
|
#define _C_IN 'n'
|
|
|
|
#define _C_INOUT 'N'
|
|
|
|
#define _C_OUT 'o'
|
|
|
|
#define _C_BYCOPY 'O'
|
1998-10-08 13:23:35 +02:00
|
|
|
#define _C_BYREF 'R'
|
1998-09-21 03:22:07 +02:00
|
|
|
#define _C_ONEWAY 'V'
|
In gcc/: 2010-09-27 Nicola Pero <nicola.pero@meta-innovation.com>
In gcc/:
2010-09-27 Nicola Pero <nicola.pero@meta-innovation.com>
* doc/objc.texi (Type encoding): Added the new 'long double' (D)
code. Added byref, which was missing in the list of codes.
Explain that enumeration values are encoded as the integer type
that the compiler uses to store them. Explain and make examples
of how 'const' interacts with pointers, and the complication of
the encoding of 'const char *'.
(Legacy type encoding): New subsection, explaining that GCC emits
incorrect type encodings for the NeXT runtime for compatibility
reasons.
(@@encode): New subsection, explaining @encode and particularly
that protocol qualifiers are not recognized inside an @encode()
expression.
(Method signatures): New subsection, explaining how method
signatures are encoded.
In gcc/objc/:
2010-09-27 Nicola Pero <nicola.pero@meta-innovation.com>
PR objc/45763
PR objc/25450
PR objc/25464
* objc-act.c: Improved comments for encoding functions.
(encode_aggregate_within): For the GNU runtime, rewritten some
obsfuscated code to clarify the various cases.
(encode_aggregate): Function removed.
(encode_array): Generate an error if asked to encode an incomplete
array as part of generating instance variables. Else, when
encoding an incomplete array inside a structure, encode it as an
array of zero size.
(encode_pointer): For the GNU runtime, fixed encoding 'BOOL *' as
'^c' instead of '*'.
(encode_gnu_bitfield): Encode enumerated types exactly in the same
type as integer types instead of using a hardcoded 'i'. If asked
to encode a non-integer type as a bitfield, do not abort
compilation immediately; instead generate an error, then skip the
type.
(encode_type): Use a 'switch' instead of a sequence of 'if's.
Added a 'default' clause that gets executed if the type can not be
matched, and that encodes it as '?' (unknown) and produces a
warning. For the GNU runtime, encode enumerated types exactly in
the same way as integer types instead of using a hardcoded 'i'.
Encode long double as 'D'. Encode 128-bit integers as 'T' or 't'.
Encode C++ reference types as pointers. Call encode_vector to
encode vectors.
(encode_vector): New function.
2010-09-27 Nicola Pero <nicola.pero@meta-innovation.com>
Merge from 'apple/trunk' branch on FSF servers. I modified the
changes to be used only when compiling for the NeXT runtime.
2005-10-10 Fariborz Jahanian <fjahanian@apple.com>
Radar 4301047
* objc-act.c (encode_type): Remove the hack.
2005-07-20 Ziemowit Laski <zlaski@apple.com>
Radar 4136935
* objc-act.c (pointee_is_readonly): New function.
(encode_pointer, encode_aggregate_within, encode_type):
Attempt to emulate GCC 3.3 when generating type encodings.
In gcc/testsuite/:
2010-09-27 Nicola Pero <nicola.pero@meta-innovation.com>
PR objc/25464
* objc.dg/type-size-3.m: New test.
2010-09-27 Nicola Pero <nicola.pero@meta-innovation.com>
PR objc/45763
* objc.dg/encode-1.m: Execute the test with the GNU runtime as
well.
2010-09-27 Nicola Pero <nicola.pero@meta-innovation.com>
PR objc/25450
* objc.dg/encode-3.m: Updated for fix of encoding of enums.
* objc.dg/type-size-2.m: Same change.
* obj-c++.dg/encode-5.mm: Same change.
2010-09-27 Nicola Pero <nicola.pero@meta-innovation.com>
Merge from 'apple/trunk' branch on FSF servers. The original
Changelogs are below.
* objc.dg/encode-6.m: Execute the test only with the GNU runtime.
* objc.dg/encode-6-next.m: New file (from encode-6.m in the
branch).
* objc.dg/encode-7-next.m: New file (from encode-7.m in the
branch).
* objc.dg/encode-7-next-64bit.m: New file (from encode-7-64bit.m
in the branch).
* objc.dg/proto-qual-1.m: Test the 3.3 ABI on NeXT (from
proto-qual-1.m in the branch) and the normal ABI on GNU.
* objc.dg/threedotthree-abi-1.m: New file (from the branch). Run
the test only with the NeXT runtime.
* obj-c++/encode-1.mm: Execute the test only with the GNU runtime.
* obj-c++/encode-1-next.mm: New file (from encode-1.mm in the
branch).
* obj-c++.dg/threedotthree-abi-1.mm: New file (from the branch).
Run the test only with the NeXT runtime.
2006-03-30 Fariborz Jahanian <fjahanian@apple.com>
Radar 4492973
* objc.dg/encode-7-64bit.m: New.
* objc.dg/encode-7.m: Skip if -m64.
2005-10-19 Fariborz Jahanian <fjahanian@apple.com>
Radar 4301047
* objc.dg/proto-qual-1.m: Fix test to match 3.3 ABI
* obj-c++.dg/threedotthree-abi-1.mm: New
* objc.dg/threedotthree-abi-1.m: New
2005-07-20 Ziemowit Laski <zlaski@apple.com>
Radar 4136935
* obj-c++.dg/encode-1.mm: Tweak encodings to match fix.
* objc.dg/encode-6.m: Likewise.
* objc.dg/encode-7.m: New test case.
In libobjc/:
2010-09-26 Nicola Pero <nicola.pero@meta-innovation.com>
* encoding.c (objc_sizeof_type): Added support for vector type and
for double long types.
(objc_alignof_type): Same change.
(objc_skip_typespec): Same change.
* objc/encoding.h (_C_GCINVISIBLE): Use '|' for _C_GCINVISIBLE
instead of '!' since '!' is already used for _C_VECTOR.
* objc/objc-api.h (_C_LNG_DBL): Added.
From-SVN: r164659
2010-09-27 21:22:13 +02:00
|
|
|
#define _C_GCINVISIBLE '|'
|
1998-09-21 03:22:07 +02:00
|
|
|
|
In libobjc/: 2010-10-10 Nicola Pero <nicola.pero@meta-innovation.com>
In libobjc/:
2010-10-10 Nicola Pero <nicola.pero@meta-innovation.com>
* objc/objc-api.h: Define Method, Method_t, Category and
Category_t. Prevent including this file at the same time as
objc/runtime.h. Updated comments.
* objc/deprecated/struct_objc_method.h: Do not define Method,
Method_t.
* objc/deprecated/struct_objc_category.h: Do not define Category,
Category_t.
* objc-private/module-abi-8.h: New file containing a copy of all
the structure definitions. Not used yet.
* objc/encoding.h (objc_aligned_size): Removed duplicate
declaration. Updated comments.
* objc/runtime.h: Added Ivar, objc_property_t, Property, Method,
Category, struct objc_method_description, _C_ID and similar,
_C_CONST and similar and _F_CONST and similar. Added
objc_sizeof_type, objc_alignof_type, objc_aligned_size,
objc_promoted_size, objc_skip_type_qualifier, objc_skip_typespec,
objc_skip_offset, objc_skip_argspec, objc_get_type_qualifiers,
struct objc_struct_layout, objc_layout_structure,
objc_layout_structure_next_member, objc_layout_finish_structure,
objc_layout_structure_get_info. Prevent including this file at
the same time as objc/objc-api.h.
From-SVN: r165256
2010-10-10 19:43:07 +02:00
|
|
|
/* The same when used as flags. */
|
1998-09-21 03:22:07 +02:00
|
|
|
#define _F_CONST 0x01
|
|
|
|
#define _F_IN 0x01
|
|
|
|
#define _F_OUT 0x02
|
|
|
|
#define _F_INOUT 0x03
|
|
|
|
#define _F_BYCOPY 0x04
|
1998-10-08 13:23:35 +02:00
|
|
|
#define _F_BYREF 0x08
|
|
|
|
#define _F_ONEWAY 0x10
|
|
|
|
#define _F_GCINVISIBLE 0x20
|
1998-09-21 03:22:07 +02:00
|
|
|
|
2002-07-02 21:43:03 +02:00
|
|
|
int objc_sizeof_type (const char *type);
|
|
|
|
int objc_alignof_type (const char *type);
|
|
|
|
int objc_aligned_size (const char *type);
|
|
|
|
int objc_promoted_size (const char *type);
|
1998-09-21 03:22:07 +02:00
|
|
|
|
2002-07-02 21:43:03 +02:00
|
|
|
const char *objc_skip_type_qualifiers (const char *type);
|
|
|
|
const char *objc_skip_typespec (const char *type);
|
|
|
|
const char *objc_skip_offset (const char *type);
|
|
|
|
const char *objc_skip_argspec (const char *type);
|
|
|
|
int method_get_number_of_arguments (struct objc_method *);
|
|
|
|
int method_get_sizeof_arguments (struct objc_method *);
|
1998-09-21 03:22:07 +02:00
|
|
|
|
2002-07-02 21:43:03 +02:00
|
|
|
char *method_get_first_argument (struct objc_method *,
|
1998-09-21 03:22:07 +02:00
|
|
|
arglist_t argframe,
|
2002-07-02 21:43:03 +02:00
|
|
|
const char **type);
|
|
|
|
char *method_get_next_argument (arglist_t argframe,
|
1998-09-21 03:22:07 +02:00
|
|
|
const char **type);
|
2002-07-02 21:43:03 +02:00
|
|
|
char *method_get_nth_argument (struct objc_method *m,
|
1998-09-21 03:22:07 +02:00
|
|
|
arglist_t argframe,
|
|
|
|
int arg,
|
|
|
|
const char **type);
|
|
|
|
|
2002-07-02 21:43:03 +02:00
|
|
|
unsigned objc_get_type_qualifiers (const char *type);
|
1998-09-21 03:22:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
struct objc_struct_layout
|
|
|
|
{
|
|
|
|
const char *original_type;
|
|
|
|
const char *type;
|
|
|
|
const char *prev_type;
|
|
|
|
unsigned int record_size;
|
|
|
|
unsigned int record_align;
|
|
|
|
};
|
|
|
|
|
|
|
|
void objc_layout_structure (const char *type,
|
|
|
|
struct objc_struct_layout *layout);
|
|
|
|
BOOL objc_layout_structure_next_member (struct objc_struct_layout *layout);
|
|
|
|
void objc_layout_finish_structure (struct objc_struct_layout *layout,
|
|
|
|
unsigned int *size,
|
|
|
|
unsigned int *align);
|
|
|
|
void objc_layout_structure_get_info (struct objc_struct_layout *layout,
|
|
|
|
unsigned int *offset,
|
|
|
|
unsigned int *align,
|
|
|
|
const char **type);
|
|
|
|
|
2004-06-25 06:31:51 +02:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif /* __cplusplus */
|
|
|
|
|
1998-09-21 03:22:07 +02:00
|
|
|
#endif /* __encoding_INCLUDE_GNU */
|