Objective-C : Implement SEL as a built-in typedef.
The reference implementation for Objective-C provides the SEL typedef (although it is also available from <objc/objc.h>). gcc/objc/ChangeLog: * objc-act.c (synth_module_prologue): Get the SEL identifier. * objc-act.h (enum objc_tree_index): Add OCTI_SEL_NAME. (objc_selector_name): New. (SEL_TYPEDEF_NAME): New. * objc-gnu-runtime-abi-01.c (gnu_runtime_01_initialize): Initialize SEL typedef. * objc-next-runtime-abi-01.c (next_runtime_01_initialize): Likewise. * objc-next-runtime-abi-02.c gcc/testsuite/ChangeLog: * obj-c++.dg/SEL-typedef.mm: New test. * objc.dg/SEL-typedef.m: New test.
This commit is contained in:
parent
7a2cc1e843
commit
bb93020ff8
@ -2954,6 +2954,7 @@ synth_module_prologue (void)
|
||||
objc_object_name = get_identifier (OBJECT_TYPEDEF_NAME);
|
||||
objc_instancetype_name = get_identifier (INSTANCE_TYPEDEF_NAME);
|
||||
objc_class_name = get_identifier (CLASS_TYPEDEF_NAME);
|
||||
objc_selector_name = get_identifier (SEL_TYPEDEF_NAME);
|
||||
|
||||
/* Declare the 'id', 'instancetype' and 'Class' typedefs. */
|
||||
type = lang_hooks.decls.pushdecl (build_decl (input_location,
|
||||
|
||||
@ -371,6 +371,7 @@ enum objc_tree_index
|
||||
OCTI_ID_NAME,
|
||||
OCTI_INSTANCETYPE_NAME,
|
||||
OCTI_CLASS_NAME,
|
||||
OCTI_SEL_NAME,
|
||||
OCTI_CNST_STR_ID,
|
||||
OCTI_CNST_STR_TYPE,
|
||||
OCTI_CNST_STR_GLOB_ID,
|
||||
@ -576,6 +577,7 @@ extern GTY(()) tree objc_global_trees[OCTI_MAX];
|
||||
#define objc_object_name objc_global_trees[OCTI_ID_NAME]
|
||||
#define objc_instancetype_name objc_global_trees[OCTI_INSTANCETYPE_NAME]
|
||||
#define objc_class_name objc_global_trees[OCTI_CLASS_NAME]
|
||||
#define objc_selector_name objc_global_trees[OCTI_SEL_NAME]
|
||||
|
||||
/* Constant string classes. */
|
||||
#define constant_string_id objc_global_trees[OCTI_CNST_STR_ID]
|
||||
@ -614,6 +616,7 @@ extern GTY(()) tree objc_global_trees[OCTI_MAX];
|
||||
#define OBJECT_TYPEDEF_NAME "id"
|
||||
#define INSTANCE_TYPEDEF_NAME "instancetype"
|
||||
#define CLASS_TYPEDEF_NAME "Class"
|
||||
#define SEL_TYPEDEF_NAME "SEL"
|
||||
|
||||
#define TAG_OBJECT "objc_object"
|
||||
#define TAG_CLASS "objc_class"
|
||||
|
||||
@ -208,6 +208,13 @@ static void gnu_runtime_01_initialize (void)
|
||||
type = build_qualified_type (type, TYPE_QUAL_CONST);
|
||||
objc_selector_type = build_pointer_type (type);
|
||||
|
||||
/* SEL typedef. */
|
||||
type = lang_hooks.decls.pushdecl (build_decl (input_location,
|
||||
TYPE_DECL,
|
||||
objc_selector_name,
|
||||
objc_selector_type));
|
||||
TREE_NO_WARNING (type) = 1;
|
||||
|
||||
/* typedef id (*IMP)(id, SEL, ...); */
|
||||
ftype = build_varargs_function_type_list (objc_object_type,
|
||||
objc_object_type,
|
||||
|
||||
@ -277,6 +277,13 @@ static void next_runtime_01_initialize (void)
|
||||
objc_selector_type = build_pointer_type (xref_tag (RECORD_TYPE,
|
||||
get_identifier (TAG_SELECTOR)));
|
||||
|
||||
/* SEL typedef. */
|
||||
type = lang_hooks.decls.pushdecl (build_decl (input_location,
|
||||
TYPE_DECL,
|
||||
objc_selector_name,
|
||||
objc_selector_type));
|
||||
TREE_NO_WARNING (type) = 1;
|
||||
|
||||
build_v1_class_template ();
|
||||
build_super_template ();
|
||||
build_v1_protocol_template ();
|
||||
|
||||
@ -374,6 +374,13 @@ static void next_runtime_02_initialize (void)
|
||||
objc_selector_type = build_pointer_type (xref_tag (RECORD_TYPE,
|
||||
get_identifier (TAG_SELECTOR)));
|
||||
|
||||
/* SEL typedef. */
|
||||
type = lang_hooks.decls.pushdecl (build_decl (input_location,
|
||||
TYPE_DECL,
|
||||
objc_selector_name,
|
||||
objc_selector_type));
|
||||
TREE_NO_WARNING (type) = 1;
|
||||
|
||||
/* IMP : id (*) (id, _message_ref_t*, ...)
|
||||
SUPER_IMP : id (*) ( super_t*, _super_message_ref_t*, ...)
|
||||
objc_v2_selector_type. */
|
||||
|
||||
7
gcc/testsuite/obj-c++.dg/SEL-typedef.mm
Normal file
7
gcc/testsuite/obj-c++.dg/SEL-typedef.mm
Normal file
@ -0,0 +1,7 @@
|
||||
/* Check that we accept the SEL typedef. */
|
||||
/* { dg-additional-options "-fsyntax-only " } */
|
||||
|
||||
SEL aSelector;
|
||||
|
||||
typedef SEL MySEL;
|
||||
|
||||
7
gcc/testsuite/objc.dg/SEL-typedef.m
Normal file
7
gcc/testsuite/objc.dg/SEL-typedef.m
Normal file
@ -0,0 +1,7 @@
|
||||
/* Check that we accept the SEL typedef. */
|
||||
/* { dg-additional-options "-fsyntax-only " } */
|
||||
|
||||
SEL aSelector;
|
||||
|
||||
typedef SEL MySEL;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user