91063b5138
* cplus-dem.c (work_stuff): Replace const_type and volatile_type with type_quals. (TYPE_UNQUALIFIED): New macro. (TYPE_QUAL_CONST): Likewise. (TYPE_QUAL_VOLATILE): Likewise. (TYPE_QUAL_RESTRICT): Likewise. (code_for_qualifier): New function. (qualifier_string): Likewise. (demangle_qualifier): Likewise. (internal_cplus_demangle): Use them. (demangle_signature): Likewise. (demangle_template_value_parm): Likewise. (do_type): Likewise. (demangle_fund_type)): Likewise. * Makefile.in (hash.h): Run gperf when necessary. * cp-tree.h (CP_TYPE_READONLY): Remove. (CP_TYPE_VOLATILE): Likewise. (CP_TYPE_QUALS): New macro. (CP_TYPE_CONST_P): Likewise. (CP_TYPE_VOLATILE_P): Likewise. (CP_TYPE_RESTRICT_P): Likewise. (CP_TYPE_CONST_NON_VOLATILE_P): Likewise. (cp_build_type_variant): Rename to ... (cp_build_qualified_type): New function. (c_apply_type_quals_to_decl): Declare. (SIGNATURE_POINTER_NAME_FORMAT): Modify to allow `restrict'. (SIGNATURE_REFERENCE_NAME_FORMAT): Likewise. (cp_type_qual_from_rid): New function. (compparms): Remove unused parameter. All callers changed. (cp_type_quals): New function. (at_least_as_qualified_p): Likewise. (more_qualified_p): Likewise. * call.c (standard_conversion): Replace calls to cp_build_type_variant with cp_build_qualified_type. Use CP_TYPE_QUALS to get qualifiers and at_least_as_qualified_p to compare them. Use CP_TYPE_* macros to check qualifiers. (reference_binding): Likewise. (implicit_conversion): Likewise. (add_builtin_candidates): Likewise. (build_over_call): Likewise. * class.c (overrides): Compare all qualifiers, not just `const', on method declarations. * cvt.c (convert_to_reference): More CP_TYPE_QUALS conversion, etc. (convert_pointer_to_real): Likewise. (type_promotes_to): Likewise. * decl.c (check_for_uninitialized_const_var): New function. (init_decl_processing): More CP_TYPE_QUALS conversion, etc. (cp_finish_decl): Use check_for_uninitialized_const_var. (grokdeclarator): More CP_TYPE_QUALS conversion, etc. Update to handle `restrict'. (grok_ctor_properties): Likewise. (grok_op_properties): Likewise. (start_function): Likewise. (rever_static_member_fn): Likewise. * decl2.c (grok_method_quals): Likewise. (grokfield): Likewise. * error.c (dump_readonly_or_volatile): Rename to ... (dump_qualifiers): New function. Handle `restrict'. (dump_type_real): Use it. (dump_aggr_type): Likewise. (dump_type_prefix): Likewise. (dump_type_suffix): Likewise. (dump_function_decl): Likewise. (cv_as_string): Likewise. * gxx.gperf: Add __restrict and __restrict__. * gxxint.texi: Document `u' as used for `__restrict', and a few other previously undocumented codes. * hash.h: Regenerated. * init.c (expand_aggr_init): More CP_TYPE_QUALS conversion, etc. (build_member_call): Likewise. (build_new_1): Likewise. * lex.c (init_parse): Add entry for RID_RESTRICT. (cons_up_default_function): More CP_TYPE_QUALS conversion, etc. (cp_type_qual_from_rid): Define. * lex.h (enum rid): Add RID_RESTRICT. * method.c (process_modifiers): Deal with `restrict'. * parse.y (primary): More CP_TYPE_QUALS conversion, etc. * parse.c: Regenerated. * pt.c (convert_nontype_argument): More CP_TYPE_QUALS conversion, etc. (tsubst_aggr_type): Likewise. (tsubst): Likewise. (check_cv_quals_for_unify): Likewise. (unify): Likewise. * rtti.c (init_rtti_processing): Likewise. (build_headof): Likewise. (get_tinfo_var): Likewise. (buidl_dynamic_cast_1): Likewise. Fix `volatile' handling. (expand_class_desc): Likewise. (expand_attr_desc): Likewise. (synthesize_tinfo_fn): Likewise. * search.c (covariant_return_p): Likewise. Fix `volatile' handling. (get_matching_virtual): Likewise. (expand_upcast_fixups): Likewise. * sig.c (build_signature_pointer_or_reference_name): Take type_quals, not constp and volatilep. (build_signature_pointer_or_reference_type): Likewise. (match_method_types): More CP_TYPE_QUALS conversion, etc. (build_signature_pointer_constructor): Likewise. (build_signature_method_call): Likewise. * tree.c (build_cplus_array_type): Likewise. (cp_build_type_variant): Rename to ... (cp_build_qualified_type): New function. Deal with `__restrict'. (canonical_type_variant): More CP_TYPE_QUALS conversion, etc. (build_exception_variant): Likewise. (mapcar): Likewise. * typeck.c (qualif_type): Likewise. (common_type): Likewise. (comptypes): Likewise. (comp_cv_target_types): Likewise. (at_least_as_qualified_p): Define. (more_qualified_p): Likewise. (comp_cv_qualification): More CP_TYPE_QUALS conversion, etc. (compparms): Likewise. (inline_conversion): Likewise. (string_conv_p): Likewise. (build_component_ref): Likewise. (build_indirect_ref): Likewise. (build_array_ref): Likewise. (build_unary_op): Likewise. (build_conditional_expr): Likewise. (build_static_cast): Likewise. (build_c_cast): Likewise. (build_modify_expr): Likewise. (convert_For_assignment): Likewise. (comp_ptr_ttypes_real): Likewise. (cp_type_quals): New function. From-SVN: r23258
138 lines
3.8 KiB
C
138 lines
3.8 KiB
C
/* Define constants and variables for communication with parse.y.
|
|
Copyright (C) 1987, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
|
Hacked by Michael Tiemann (tiemann@cygnus.com)
|
|
and by Brendan Kehoe (brendan@cygnus.com).
|
|
|
|
This file is part of GNU CC.
|
|
|
|
GNU CC is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY. No author or distributor
|
|
accepts responsibility to anyone for the consequences of using it
|
|
or for whether it serves any particular purpose or works at all,
|
|
unless he says so in writing. Refer to the GNU CC General Public
|
|
License for full details.
|
|
|
|
Everyone is granted permission to copy, modify and redistribute
|
|
GNU CC, but only under the conditions described in the
|
|
GNU CC General Public License. A copy of this license is
|
|
supposed to have been given to you along with GNU CC so you
|
|
can know your rights and responsibilities. It should be in a
|
|
file named COPYING. Among other things, the copyright notice
|
|
and this notice must be preserved on all copies. */
|
|
|
|
|
|
|
|
enum rid
|
|
{
|
|
RID_UNUSED,
|
|
RID_INT,
|
|
RID_BOOL,
|
|
RID_CHAR,
|
|
RID_WCHAR,
|
|
RID_FLOAT,
|
|
RID_DOUBLE,
|
|
RID_VOID,
|
|
|
|
/* C++ extension */
|
|
RID_CLASS,
|
|
RID_RECORD,
|
|
RID_UNION,
|
|
RID_ENUM,
|
|
RID_LONGLONG,
|
|
|
|
/* This is where grokdeclarator starts its search when setting the specbits.
|
|
The first seven are in the order of most frequently used, as found
|
|
building libg++. */
|
|
|
|
RID_EXTERN,
|
|
RID_CONST,
|
|
RID_LONG,
|
|
RID_TYPEDEF,
|
|
RID_UNSIGNED,
|
|
RID_SHORT,
|
|
RID_INLINE,
|
|
|
|
RID_STATIC,
|
|
|
|
RID_REGISTER,
|
|
RID_VOLATILE,
|
|
RID_FRIEND,
|
|
RID_VIRTUAL,
|
|
RID_EXPLICIT,
|
|
RID_EXPORT,
|
|
RID_SIGNED,
|
|
RID_AUTO,
|
|
RID_MUTABLE,
|
|
RID_COMPLEX,
|
|
RID_RESTRICT,
|
|
|
|
/* This is where grokdeclarator ends its search when setting the
|
|
specbits. */
|
|
|
|
RID_PUBLIC,
|
|
RID_PRIVATE,
|
|
RID_PROTECTED,
|
|
RID_EXCEPTION,
|
|
RID_TEMPLATE,
|
|
RID_SIGNATURE,
|
|
RID_NULL,
|
|
/* Before adding enough to get up to 64, the RIDBIT_* macros
|
|
will have to be changed a little. */
|
|
RID_MAX
|
|
};
|
|
|
|
#define NORID RID_UNUSED
|
|
|
|
#define RID_FIRST_MODIFIER RID_EXTERN
|
|
#define RID_LAST_MODIFIER RID_COMPLEX
|
|
|
|
/* The type that can represent all values of RIDBIT. */
|
|
/* We assume that we can stick in at least 32 bits into this. */
|
|
typedef struct { unsigned long idata[2]; }
|
|
RID_BIT_TYPE;
|
|
|
|
/* Be careful, all these modify N twice. */
|
|
#define RIDBIT_SETP(N, V) (((unsigned long)1 << (int) ((N)%32)) \
|
|
& (V).idata[(N)/32])
|
|
#define RIDBIT_NOTSETP(NN, VV) (! RIDBIT_SETP (NN, VV))
|
|
#define RIDBIT_SET(N, V) do { \
|
|
(V).idata[(N)/32] \
|
|
|= ((unsigned long)1 << (int) ((N)%32)); \
|
|
} while (0)
|
|
#define RIDBIT_RESET(N, V) do { \
|
|
(V).idata[(N)/32] \
|
|
&= ~((unsigned long)1 << (int) ((N)%32)); \
|
|
} while (0)
|
|
#define RIDBIT_RESET_ALL(V) do { \
|
|
(V).idata[0] = 0; \
|
|
(V).idata[1] = 0; \
|
|
} while (0)
|
|
#define RIDBIT_ANY_SET(V) ((V).idata[0] || (V).idata[1])
|
|
|
|
/* The elements of `ridpointers' are identifier nodes
|
|
for the reserved type names and storage classes.
|
|
It is indexed by a RID_... value. */
|
|
extern tree ridpointers[(int) RID_MAX];
|
|
|
|
/* the declaration found for the last IDENTIFIER token read in.
|
|
yylex must look this up to detect typedefs, which get token type TYPENAME,
|
|
so it is left around in case the identifier is not a typedef but is
|
|
used in a context which makes it a reference to a variable. */
|
|
extern tree lastiddecl;
|
|
|
|
extern char *token_buffer; /* Pointer to token buffer. */
|
|
|
|
/* Back-door communication channel to the lexer. */
|
|
extern int looking_for_typename;
|
|
extern int looking_for_template;
|
|
|
|
/* Tell the lexer where to look for names. */
|
|
extern tree got_scope;
|
|
extern tree got_object;
|
|
|
|
/* Pending language change.
|
|
Positive is push count, negative is pop count. */
|
|
extern int pending_lang_change;
|
|
|
|
extern int yylex PROTO((void));
|