1994-03-23 18:33:53 -05:00
|
|
|
/* Define constants and variables for communication with parse.y.
|
1998-11-22 22:12:41 -05:00
|
|
|
Copyright (C) 1987, 92-97, 1998 Free Software Foundation, Inc.
|
1994-02-23 20:02:37 -05:00
|
|
|
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,
|
1994-05-19 16:19:03 -04:00
|
|
|
RID_BOOL,
|
1994-02-23 20:02:37 -05:00
|
|
|
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,
|
1994-11-28 19:59:16 -05:00
|
|
|
RID_EXPLICIT,
|
1998-09-24 18:29:31 -04:00
|
|
|
RID_EXPORT,
|
1994-08-18 16:50:43 -04:00
|
|
|
RID_SIGNED,
|
|
|
|
RID_AUTO,
|
|
|
|
RID_MUTABLE,
|
1997-05-28 19:20:02 -04:00
|
|
|
RID_COMPLEX,
|
cplus-dem.c (work_stuff): Replace const_type and volatile_type with type_quals.
* 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
1998-10-23 10:53:28 -04:00
|
|
|
RID_RESTRICT,
|
1994-08-18 16:50:43 -04:00
|
|
|
|
1996-07-10 21:13:25 -04:00
|
|
|
/* This is where grokdeclarator ends its search when setting the
|
|
|
|
specbits. */
|
1994-08-18 16:50:43 -04:00
|
|
|
|
1994-02-23 20:02:37 -05:00
|
|
|
RID_PUBLIC,
|
|
|
|
RID_PRIVATE,
|
|
|
|
RID_PROTECTED,
|
|
|
|
RID_EXCEPTION,
|
1994-05-12 22:46:07 -04:00
|
|
|
RID_TEMPLATE,
|
1994-02-23 20:02:37 -05:00
|
|
|
RID_SIGNATURE,
|
1996-08-08 18:54:56 -04:00
|
|
|
RID_NULL,
|
1994-02-23 20:02:37 -05:00
|
|
|
/* Before adding enough to get up to 64, the RIDBIT_* macros
|
1996-07-10 21:13:25 -04:00
|
|
|
will have to be changed a little. */
|
1994-02-23 20:02:37 -05:00
|
|
|
RID_MAX
|
|
|
|
};
|
|
|
|
|
|
|
|
#define NORID RID_UNUSED
|
|
|
|
|
|
|
|
#define RID_FIRST_MODIFIER RID_EXTERN
|
1997-05-28 19:20:02 -04:00
|
|
|
#define RID_LAST_MODIFIER RID_COMPLEX
|
1994-02-23 20:02:37 -05:00
|
|
|
|
|
|
|
/* The type that can represent all values of RIDBIT. */
|
1996-07-10 21:13:25 -04:00
|
|
|
/* We assume that we can stick in at least 32 bits into this. */
|
1994-02-23 20:02:37 -05:00
|
|
|
typedef struct { unsigned long idata[2]; }
|
|
|
|
RID_BIT_TYPE;
|
|
|
|
|
1996-07-10 21:13:25 -04:00
|
|
|
/* Be careful, all these modify N twice. */
|
1994-02-23 20:02:37 -05:00
|
|
|
#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;
|
1994-06-03 17:42:31 -04:00
|
|
|
extern int looking_for_template;
|
1994-02-23 20:02:37 -05:00
|
|
|
|
1994-04-14 21:44:15 -04:00
|
|
|
/* Tell the lexer where to look for names. */
|
|
|
|
extern tree got_scope;
|
1995-01-24 03:19:58 -05:00
|
|
|
extern tree got_object;
|
1994-04-14 21:44:15 -04:00
|
|
|
|
1994-02-23 20:02:37 -05:00
|
|
|
/* Pending language change.
|
|
|
|
Positive is push count, negative is pop count. */
|
|
|
|
extern int pending_lang_change;
|
|
|
|
|
[multiple changes]
Wed Aug 20 17:25:08 1997 Jason Merrill <jason@yorick.cygnus.com>
* call.c (is_subseq): Don't try to be clever.
Wed Aug 20 03:13:36 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
* parse.y, pt.c: Include "except.h".
* call.c, class.c, class.h, cp-tree.h, cvt.c, decl.c, decl2.c,
error.c, except.c, expr.c, friend.c, g++spec.c, init.c, input.c,
lex.c, lex.h, method.c, parse.y, pt.c, repo.c, rtti.c, search.c,
sig.c, spew.c, tree.c, typeck.c, typeck2.c, xref.c: Finish
prototyping.
Wed Aug 20 01:34:40 1997 Jason Merrill <jason@yorick.cygnus.com>
* decl2.c (mark_vtable_entries): Instead of replacing pure
virtuals with a reference to __pure_virtual, copy the decl and
change the RTL.
From-SVN: r14868
1997-08-20 20:50:39 -04:00
|
|
|
extern int yylex PROTO((void));
|