objc-act.h (get_object_reference): Rename to get_protocol_reference.

2004-06-20  David Ayers  <d.ayers@inode.at>

	* objc/objc-act.h (get_object_reference): Rename to
	get_protocol_reference.
	(super_type): Rename to objc_super_type.
	(selector_type): Rename to objc_selector_type.
	(id_type): Rename to objc_id_type.
	(instance_type): Rename to objc_instance_type.
	(protocol_type): Rename to objc_protocol_type.
	(IS_ID): Update reference to id_type.
	* objc/objc-act.c (get_object_reference): Rename to
	get_protocol_reference; add documentation; update references to
	id_type.
	(lookup_method_in_protocol_list): Rename class_meth to
	is_class; add documentation.
	(finish_message_expr): Rename is_class to class_tree.
	(synth_module_prologue, objc_is_object_ptr, objc_build_exc_ptr,
	next_sjlj_build_try_catch_finally, objc_begin_catch_clause,
	build_next_objc_exception_stuff, get_arg_type_list,
	build_objc_method_call): Update references to id_type.
	(synth_module_prologue, build_objc_symtab_template,
	build_selector_reference_decl, build_selector,
	build_selector_translation_table, build_typed_selector_reference,
	get_arg_type_list, synth_self_and_ucmd_args, get_arg_type_list,
	synth_self_and_ucmd_args): Update references to selector_type.
	(build_private_template, build_ivar_reference):	Update references
	to instance_type.
	(synth_module_prologue, build_protocol_reference,
	build_protocol_expr, start_protocol): Update references to
	protocol_type.
	(synth_module_prologue, get_arg_type_list, build_objc_method_call):
	Update references to super_type.
	* c-parse.in: (typespec_nonreserved_nonattr): Update
	references to get_object_reference.
	* objc/objc-tree.def: Add C mode identifier sequence.

From-SVN: r83425
This commit is contained in:
David Ayers 2004-06-21 03:50:18 +02:00 committed by Ziemowit Laski
parent 6687b0fc2a
commit 5c234cd7f4
5 changed files with 130 additions and 78 deletions

View File

@ -1,3 +1,39 @@
2004-06-20 David Ayers <d.ayers@inode.at>
* objc/objc-act.h (get_object_reference): Rename to
get_protocol_reference.
(super_type): Rename to objc_super_type.
(selector_type): Rename to objc_selector_type.
(id_type): Rename to objc_id_type.
(instance_type): Rename to objc_instance_type.
(protocol_type): Rename to objc_protocol_type.
(IS_ID): Update reference to id_type.
* objc/objc-act.c (get_object_reference): Rename to
get_protocol_reference; add documentation; update references to
id_type.
(lookup_method_in_protocol_list): Rename class_meth to
is_class; add documentation.
(finish_message_expr): Rename is_class to class_tree.
(synth_module_prologue, objc_is_object_ptr, objc_build_exc_ptr,
next_sjlj_build_try_catch_finally, objc_begin_catch_clause,
build_next_objc_exception_stuff, get_arg_type_list,
build_objc_method_call): Update references to id_type.
(synth_module_prologue, build_objc_symtab_template,
build_selector_reference_decl, build_selector,
build_selector_translation_table, build_typed_selector_reference,
get_arg_type_list, synth_self_and_ucmd_args, get_arg_type_list,
synth_self_and_ucmd_args): Update references to selector_type.
(build_private_template, build_ivar_reference): Update references
to instance_type.
(synth_module_prologue, build_protocol_reference,
build_protocol_expr, start_protocol): Update references to
protocol_type.
(synth_module_prologue, get_arg_type_list, build_objc_method_call):
Update references to super_type.
* c-parse.in: (typespec_nonreserved_nonattr): Update
references to get_object_reference.
* objc/objc-tree.def: Add C mode identifier sequence.
2004-06-20 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
* loop-invariant.c: New file.

View File

@ -1326,12 +1326,12 @@ typespec_nonreserved_nonattr:
| CLASSNAME protocolrefs
{ $$ = get_static_reference ($1, $2); }
| OBJECTNAME protocolrefs
{ $$ = get_object_reference ($2); }
{ $$ = get_protocol_reference ($2); }
/* Make "<SomeProtocol>" equivalent to "id <SomeProtocol>"
- nisse@lysator.liu.se */
| non_empty_protocolrefs
{ $$ = get_object_reference ($1); }
{ $$ = get_protocol_reference ($1); }
@@end_ifobjc
| typeof '(' expr ')'
{ skip_evaluation--;

View File

@ -538,9 +538,13 @@ define_decl (tree declarator, tree declspecs)
return decl;
}
/* Return the first occurrence of a method declaration corresponding
to sel_name in rproto_list. Search rproto_list recursively.
If is_class is 0, search for instance methods, otherwise for class
methods. */
static tree
lookup_method_in_protocol_list (tree rproto_list, tree sel_name,
int class_meth)
int is_class)
{
tree rproto, p;
tree fnd = 0;
@ -551,13 +555,13 @@ lookup_method_in_protocol_list (tree rproto_list, tree sel_name,
if (TREE_CODE (p) == PROTOCOL_INTERFACE_TYPE)
{
if ((fnd = lookup_method (class_meth
if ((fnd = lookup_method (is_class
? PROTOCOL_CLS_METHODS (p)
: PROTOCOL_NST_METHODS (p), sel_name)))
;
else if (PROTOCOL_LIST (p))
fnd = lookup_method_in_protocol_list (PROTOCOL_LIST (p),
sel_name, class_meth);
sel_name, is_class);
}
else
{
@ -979,8 +983,9 @@ get_static_reference (tree interface, tree protocols)
return type;
}
/* Return a declaration corresponding to a protocol list qualified 'id'. */
tree
get_object_reference (tree protocols)
get_protocol_reference (tree protocols)
{
tree type_decl = lookup_name (objc_id_id);
tree type;
@ -988,7 +993,7 @@ get_object_reference (tree protocols)
if (type_decl && TREE_CODE (type_decl) == TYPE_DECL)
{
type = TREE_TYPE (type_decl);
if (TYPE_MAIN_VARIANT (type) != id_type)
if (TYPE_MAIN_VARIANT (type) != objc_id_type)
warning ("unexpected type for `id' (%s)",
gen_declaration (type, errbuf));
}
@ -1139,7 +1144,7 @@ synth_module_prologue (void)
objc_object_reference = xref_tag (RECORD_TYPE, objc_object_id);
id_type = build_pointer_type (objc_object_reference);
objc_id_type = build_pointer_type (objc_object_reference);
objc_id_id = get_identifier (TYPE_ID);
objc_class_id = get_identifier (TAG_CLASS);
@ -1147,19 +1152,18 @@ synth_module_prologue (void)
objc_class_type = build_pointer_type (xref_tag (RECORD_TYPE, objc_class_id));
temp_type = get_identifier (PROTOCOL_OBJECT_CLASS_NAME);
objc_declare_class (tree_cons (NULL_TREE, temp_type, NULL_TREE));
protocol_type = build_pointer_type (xref_tag (RECORD_TYPE,
temp_type));
objc_protocol_type = build_pointer_type (xref_tag (RECORD_TYPE, temp_type));
/* Declare type of selector-objects that represent an operation name. */
if (flag_next_runtime)
/* `struct objc_selector *' */
selector_type
objc_selector_type
= build_pointer_type (xref_tag (RECORD_TYPE,
get_identifier (TAG_SELECTOR)));
else
/* `const struct objc_selector *' */
selector_type
objc_selector_type
= build_pointer_type
(build_qualified_type (xref_tag (RECORD_TYPE,
get_identifier (TAG_SELECTOR)),
@ -1168,8 +1172,8 @@ synth_module_prologue (void)
/* Declare receiver type used for dispatching messages to 'super'. */
/* `struct objc_super *' */
super_type = build_pointer_type (xref_tag (RECORD_TYPE,
get_identifier (TAG_SUPER)));
objc_super_type = build_pointer_type (xref_tag (RECORD_TYPE,
get_identifier (TAG_SUPER)));
if (flag_next_runtime)
{
@ -1183,9 +1187,10 @@ synth_module_prologue (void)
/* id objc_msgSend_stret (id, SEL, ...); */
/* id objc_msgSendNonNil_stret (id, SEL, ...); */
temp_type
= build_function_type (id_type,
tree_cons (NULL_TREE, id_type,
tree_cons (NULL_TREE, selector_type,
= build_function_type (objc_id_type,
tree_cons (NULL_TREE, objc_id_type,
tree_cons (NULL_TREE,
objc_selector_type,
NULL_TREE)));
umsg_decl = builtin_function (TAG_MSGSEND,
temp_type, 0, NOT_BUILT_IN,
@ -1203,9 +1208,10 @@ synth_module_prologue (void)
/* id objc_msgSendSuper (struct objc_super *, SEL, ...); */
/* id objc_msgSendSuper_stret (struct objc_super *, SEL, ...); */
temp_type
= build_function_type (id_type,
tree_cons (NULL_TREE, super_type,
tree_cons (NULL_TREE, selector_type,
= build_function_type (objc_id_type,
tree_cons (NULL_TREE, objc_super_type,
tree_cons (NULL_TREE,
objc_selector_type,
NULL_TREE)));
umsg_super_decl = builtin_function (TAG_MSGSENDSUPER,
temp_type, 0, NOT_BUILT_IN,
@ -1221,16 +1227,18 @@ synth_module_prologue (void)
/* typedef id (*IMP)(id, SEL, ...); */
tree IMP_type
= build_pointer_type
(build_function_type (id_type,
tree_cons (NULL_TREE, id_type,
tree_cons (NULL_TREE, selector_type,
(build_function_type (objc_id_type,
tree_cons (NULL_TREE, objc_id_type,
tree_cons (NULL_TREE,
objc_selector_type,
NULL_TREE))));
/* IMP objc_msg_lookup (id, SEL); */
temp_type
= build_function_type (IMP_type,
tree_cons (NULL_TREE, id_type,
tree_cons (NULL_TREE, selector_type,
tree_cons (NULL_TREE, objc_id_type,
tree_cons (NULL_TREE,
objc_selector_type,
void_list_node)));
umsg_decl = builtin_function (TAG_MSGSEND,
temp_type, 0, NOT_BUILT_IN,
@ -1239,8 +1247,9 @@ synth_module_prologue (void)
/* IMP objc_msg_lookup_super (struct objc_super *, SEL); */
temp_type
= build_function_type (IMP_type,
tree_cons (NULL_TREE, super_type,
tree_cons (NULL_TREE, selector_type,
tree_cons (NULL_TREE, objc_super_type,
tree_cons (NULL_TREE,
objc_selector_type,
void_list_node)));
umsg_super_decl = builtin_function (TAG_MSGSENDSUPER,
temp_type, 0, NOT_BUILT_IN,
@ -1249,7 +1258,7 @@ synth_module_prologue (void)
/* id objc_getClass (const char *); */
temp_type = build_function_type (id_type,
temp_type = build_function_type (objc_id_type,
tree_cons (NULL_TREE,
const_string_type_node,
void_list_node));
@ -1288,7 +1297,7 @@ synth_module_prologue (void)
debug_hooks = save_hooks;
}
else
temp_type = build_array_type (selector_type, NULL_TREE);
temp_type = build_array_type (objc_selector_type, NULL_TREE);
layout_type (temp_type);
UOBJC_SELECTOR_TABLE_decl
@ -1558,7 +1567,7 @@ build_objc_symtab_template (void)
/* SEL *refs; */
field_decl = create_builtin_decl (FIELD_DECL,
build_pointer_type (selector_type),
build_pointer_type (objc_selector_type),
"refs");
chainon (field_decl_chain, field_decl);
@ -2086,7 +2095,7 @@ build_selector_reference_decl (void)
ident = get_identifier (buf);
decl = build_decl (VAR_DECL, ident, selector_type);
decl = build_decl (VAR_DECL, ident, objc_selector_type);
DECL_EXTERNAL (decl) = 1;
TREE_PUBLIC (decl) = 0;
TREE_USED (decl) = 1;
@ -2108,7 +2117,7 @@ build_selector (tree ident)
if (flag_typed_selectors)
return expr;
else
return build_c_cast (selector_type, expr); /* cast! */
return build_c_cast (objc_selector_type, expr); /* cast! */
}
static void
@ -2158,7 +2167,7 @@ build_selector_translation_table (void)
sc_spec = build_tree_list (NULL_TREE, ridpointers[(int) RID_STATIC]);
/* static SEL _OBJC_SELECTOR_REFERENCES_n = ...; */
decl_specs = tree_cons (NULL_TREE, selector_type, sc_spec);
decl_specs = tree_cons (NULL_TREE, objc_selector_type, sc_spec);
var_decl = name;
@ -2249,7 +2258,7 @@ build_typed_selector_reference (tree ident, tree prototype)
build_array_ref (UOBJC_SELECTOR_TABLE_decl,
build_int_2 (index, 0)),
1);
return build_c_cast (selector_type, expr);
return build_c_cast (objc_selector_type, expr);
}
static tree
@ -2558,8 +2567,8 @@ objc_is_object_ptr (tree type)
if (!type || TREE_CODE (type) != POINTER_TYPE)
return 0;
/* NB: This function may be called before the ObjC front-end has
been initialized, in which case ID_TYPE will be NULL. */
if (id_type && type && TYPE_P (type)
been initialized, in which case OBJC_ID_TYPE will be NULL. */
if (objc_id_type && type && TYPE_P (type)
&& (IS_ID (type)
|| TREE_TYPE (type) == TREE_TYPE (objc_class_type)))
return type;
@ -2773,13 +2782,13 @@ objc_build_exc_ptr (void)
tree var = cur_try_context->caught_decl;
if (!var)
{
var = objc_create_temporary_var (id_type);
var = objc_create_temporary_var (objc_id_type);
cur_try_context->caught_decl = var;
}
return var;
}
else
return build (EXC_PTR_EXPR, id_type);
return build (EXC_PTR_EXPR, objc_id_type);
}
/* Build "objc_exception_try_exit(&_stack)". */
@ -2959,7 +2968,7 @@ next_sjlj_build_try_catch_finally (void)
stack_decl = objc_create_temporary_var (t);
cur_try_context->stack_decl = stack_decl;
rethrow_decl = objc_create_temporary_var (id_type);
rethrow_decl = objc_create_temporary_var (objc_id_type);
cur_try_context->rethrow_decl = rethrow_decl;
TREE_THIS_VOLATILE (rethrow_decl) = 1;
TREE_CHAIN (rethrow_decl) = stack_decl;
@ -2971,7 +2980,7 @@ next_sjlj_build_try_catch_finally (void)
/* Initialize rethrow_decl. */
t = build (MODIFY_EXPR, void_type_node, rethrow_decl,
convert (id_type, null_pointer_node));
convert (objc_id_type, null_pointer_node));
annotate_with_locus (t, cur_try_context->try_locus);
append_to_statement_list (t, &BIND_EXPR_BODY (bind));
@ -3091,7 +3100,7 @@ objc_begin_catch_clause (tree parm)
warning ("exception of type %<%T%> will be caught",
TREE_TYPE (type));
warning ("%H by earlier handler for %<%T%>",
EXPR_LOCUS (stmt), TREE_TYPE (t ? t : id_type));
EXPR_LOCUS (stmt), TREE_TYPE (t ? t : objc_id_type));
break;
}
}
@ -3291,7 +3300,7 @@ build_next_objc_exception_stuff (void)
/* id objc_exception_extract(struct _objc_exception_data *); */
temp_type
= build_function_type (id_type,
= build_function_type (objc_id_type,
tree_cons (NULL_TREE,
build_pointer_type (objc_exception_data_template),
void_list_node));
@ -3310,10 +3319,11 @@ build_next_objc_exception_stuff (void)
= builtin_function (TAG_EXCEPTIONTRYEXIT, temp_type, 0, NOT_BUILT_IN, NULL, NULL_TREE);
/* int objc_exception_match(id, id); */
temp_type = build_function_type (integer_type_node,
tree_cons (NULL_TREE, id_type,
tree_cons (NULL_TREE, id_type,
void_list_node)));
temp_type
= build_function_type (integer_type_node,
tree_cons (NULL_TREE, objc_id_type,
tree_cons (NULL_TREE, objc_id_type,
void_list_node)));
objc_exception_match_decl
= builtin_function (TAG_EXCEPTIONMATCH, temp_type, 0, NOT_BUILT_IN, NULL, NULL_TREE);
@ -3333,7 +3343,7 @@ build_objc_exception_stuff (void)
/* void objc_sync_enter(id); */
/* void objc_sync_exit(id); */
temp_type = build_function_type (void_type_node,
tree_cons (NULL_TREE, id_type,
tree_cons (NULL_TREE, objc_id_type,
void_list_node));
objc_exception_throw_decl
= builtin_function (TAG_EXCEPTIONTHROW, temp_type, 0, NOT_BUILT_IN, NULL,
@ -3375,7 +3385,7 @@ build_private_template (tree class)
TREE_STATIC_TEMPLATE (uprivate_record) = 1;
}
instance_type
objc_instance_type
= groktypename (build_tree_list (build_tree_list (NULL_TREE,
uprivate_record),
build1 (INDIRECT_REF, NULL_TREE,
@ -5416,14 +5426,14 @@ get_arg_type_list (tree meth, int context, int superflag)
/* Receiver type. */
if (flag_next_runtime && superflag)
arglist = build_tree_list (NULL_TREE, super_type);
arglist = build_tree_list (NULL_TREE, objc_super_type);
else if (context == METHOD_DEF)
arglist = build_tree_list (NULL_TREE, TREE_TYPE (self_decl));
else
arglist = build_tree_list (NULL_TREE, id_type);
arglist = build_tree_list (NULL_TREE, objc_id_type);
/* Selector type - will eventually change to `int'. */
chainon (arglist, build_tree_list (NULL_TREE, selector_type));
chainon (arglist, build_tree_list (NULL_TREE, objc_selector_type));
/* No actual method prototype given -- assume that remaining arguments
are `...'. */
@ -5652,7 +5662,7 @@ tree
finish_message_expr (tree receiver, tree sel_name, tree method_params)
{
tree method_prototype = NULL_TREE, rprotos = NULL_TREE, rtype;
tree selector, retval, is_class;
tree selector, retval, class_tree;
int self, super, have_cast;
/* Extract the receiver of the message, as well as its type
@ -5673,14 +5683,14 @@ finish_message_expr (tree receiver, tree sel_name, tree method_params)
/* If the receiver is a class object, retrieve the corresponding
@interface, if one exists. */
is_class = receiver_is_class_object (receiver, self, super);
class_tree = receiver_is_class_object (receiver, self, super);
/* Now determine the receiver type (if an explicit cast has not been
provided). */
if (!have_cast)
{
if (is_class)
rtype = lookup_interface (is_class);
if (class_tree)
rtype = lookup_interface (class_tree);
/* Handle `self' and `super'. */
else if (super)
{
@ -5703,23 +5713,23 @@ finish_message_expr (tree receiver, tree sel_name, tree method_params)
|| TREE_TYPE (rtype) == TREE_TYPE (objc_class_type))
{
if (!rtype)
rtype = xref_tag (RECORD_TYPE, is_class);
rtype = xref_tag (RECORD_TYPE, class_tree);
else if (IS_ID (rtype))
{
rprotos = TYPE_PROTOCOL_LIST (rtype);
rtype = NULL_TREE;
}
else
is_class = TYPE_NAME (rtype) = get_identifier ("Class");
class_tree = TYPE_NAME (rtype) = get_identifier ("Class");
if (rprotos)
method_prototype
= lookup_method_in_protocol_list (rprotos, sel_name,
is_class != NULL_TREE);
class_tree != NULL_TREE);
if (!method_prototype && !rprotos)
method_prototype
= lookup_method_in_hash_lists (sel_name,
is_class != NULL_TREE);
class_tree != NULL_TREE);
}
else
{
@ -5751,7 +5761,7 @@ finish_message_expr (tree receiver, tree sel_name, tree method_params)
in the published @interface for the class (and its
superclasses). */
method_prototype
= lookup_method_static (rtype, sel_name, is_class != NULL_TREE);
= lookup_method_static (rtype, sel_name, class_tree != NULL_TREE);
/* If the method was not found in the @interface, it may still
exist locally as part of the @implementation. */
@ -5760,7 +5770,7 @@ finish_message_expr (tree receiver, tree sel_name, tree method_params)
== OBJC_TYPE_NAME (rtype))
method_prototype
= lookup_method
((is_class
((class_tree
? CLASS_CLS_METHODS (objc_implementation_context)
: CLASS_NST_METHODS (objc_implementation_context)),
sel_name);
@ -5770,7 +5780,7 @@ finish_message_expr (tree receiver, tree sel_name, tree method_params)
if (!method_prototype && rprotos)
method_prototype
= lookup_method_in_protocol_list (rprotos, sel_name,
is_class != NULL_TREE);
class_tree != NULL_TREE);
}
else
{
@ -5787,11 +5797,11 @@ finish_message_expr (tree receiver, tree sel_name, tree method_params)
if (rtype)
warning ("`%s' may not respond to `%c%s'",
IDENTIFIER_POINTER (OBJC_TYPE_NAME (rtype)),
(is_class ? '+' : '-'),
(class_tree ? '+' : '-'),
IDENTIFIER_POINTER (sel_name));
if (rprotos)
warning ("`%c%s' not implemented by protocol(s)",
(is_class ? '+' : '-'),
(class_tree ? '+' : '-'),
IDENTIFIER_POINTER (sel_name));
if (!warn_missing_methods)
{
@ -5838,7 +5848,7 @@ build_objc_method_call (int super_flag, tree method_prototype,
(!flag_next_runtime || flag_nil_receivers
? umsg_decl
: umsg_nonnil_decl));
tree rcv_p = (super_flag ? super_type : id_type);
tree rcv_p = (super_flag ? objc_super_type : objc_id_type);
/* If a prototype for the method to be called exists, then cast
the sender's return type and arguments to match that of the method.
@ -5846,7 +5856,7 @@ build_objc_method_call (int super_flag, tree method_prototype,
tree ret_type
= (method_prototype
? groktypename (TREE_TYPE (method_prototype))
: id_type);
: objc_id_type);
tree sender_cast
= build_pointer_type
(build_function_type
@ -5957,9 +5967,9 @@ build_protocol_expr (tree protoname)
expr = build_unary_op (ADDR_EXPR, PROTOCOL_FORWARD_DECL (p), 0);
/* ??? Ideally we'd build the reference with protocol_type directly,
/* ??? Ideally we'd build the reference with objc_protocol_type directly,
if we have it, rather than converting it here. */
expr = convert (protocol_type, expr);
expr = convert (objc_protocol_type, expr);
/* The @protocol() expression is being compiled into a pointer to a
statically allocated instance of the Protocol class. To become
@ -5977,7 +5987,7 @@ build_protocol_expr (tree protoname)
if (! flag_next_runtime)
{
/* This type is a struct containing the fields of a Protocol
object. (Cfr. protocol_type instead is the type of a pointer
object. (Cfr. objc_protocol_type instead is the type of a pointer
to such a struct). */
tree protocol_struct_type = xref_tag
(RECORD_TYPE, get_identifier (PROTOCOL_OBJECT_CLASS_NAME));
@ -6090,7 +6100,7 @@ build_ivar_reference (tree id)
paradigm. */
warning ("instance variable `%s' accessed in class method",
IDENTIFIER_POINTER (id));
TREE_TYPE (self_decl) = instance_type; /* cast */
TREE_TYPE (self_decl) = objc_instance_type; /* cast */
}
return build_component_ref (build_indirect_ref (self_decl, "->"), id);
@ -7500,7 +7510,7 @@ synth_self_and_ucmd_args (void)
build1 (INDIRECT_REF, NULL_TREE, self_id)),
unused_list));
decl_specs = build_tree_list (NULL_TREE, TREE_TYPE (selector_type));
decl_specs = build_tree_list (NULL_TREE, TREE_TYPE (objc_selector_type));
push_parm_decl (build_tree_list
(build_tree_list (decl_specs,
build1 (INDIRECT_REF, NULL_TREE, ucmd_id)),

View File

@ -57,7 +57,7 @@ void objc_clear_super_receiver (void);
tree get_class_ivars_from_name (tree);
tree get_class_reference (tree);
tree get_static_reference (tree, tree);
tree get_object_reference (tree);
tree get_protocol_reference (tree);
tree build_message_expr (tree);
tree finish_message_expr (tree, tree, tree);
tree build_selector_expr (tree);
@ -308,17 +308,17 @@ extern GTY(()) tree objc_global_trees[OCTI_MAX];
#define objc_get_meta_class_decl \
objc_global_trees[OCTI_GET_MCLASS_DECL]
#define super_type objc_global_trees[OCTI_SUPER_TYPE]
#define selector_type objc_global_trees[OCTI_SEL_TYPE]
#define id_type objc_global_trees[OCTI_ID_TYPE]
#define objc_super_type objc_global_trees[OCTI_SUPER_TYPE]
#define objc_selector_type objc_global_trees[OCTI_SEL_TYPE]
#define objc_id_type objc_global_trees[OCTI_ID_TYPE]
#define objc_class_type objc_global_trees[OCTI_CLS_TYPE]
#define instance_type objc_global_trees[OCTI_NST_TYPE]
#define protocol_type objc_global_trees[OCTI_PROTO_TYPE]
#define objc_instance_type objc_global_trees[OCTI_NST_TYPE]
#define objc_protocol_type objc_global_trees[OCTI_PROTO_TYPE]
/* Type checking macros. */
#define IS_ID(TYPE) \
(TYPE_MAIN_VARIANT (TYPE) == TYPE_MAIN_VARIANT (id_type))
(TYPE_MAIN_VARIANT (TYPE) == TYPE_MAIN_VARIANT (objc_id_type))
#define IS_PROTOCOL_QUALIFIED_ID(TYPE) \
(IS_ID (TYPE) && TYPE_PROTOCOL_LIST (TYPE))
#define IS_SUPER(TYPE) \

View File

@ -37,3 +37,9 @@ DEFTREECODE (CLASS_METHOD_DECL, "class_method_decl", 'd', 0)
/* Objective-C expressions. */
DEFTREECODE (MESSAGE_SEND_EXPR, "message_send_expr", 'e', 3)
DEFTREECODE (CLASS_REFERENCE_EXPR, "class_reference_expr", 'e', 1)
/*
Local variables:
mode:c
End:
*/