c-tree.h (skip_evaluation): Move declaration...
* c-tree.h (skip_evaluation): Move declaration... * c-common.h: ... here. * c-typeck.c (build_external_ref): Don't assemble_external nor mark a tree as used if skip_evaluation is set. * c-parse.in (typeof): New non-terminal to set skip_evaluation around TYPEOF. (typespec_nonreserved_nonattr): Use it. From-SVN: r56727
This commit is contained in:
parent
127aee1b50
commit
42be70e717
|
@ -1,3 +1,13 @@
|
|||
2002-09-01 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
* c-tree.h (skip_evaluation): Move declaration...
|
||||
* c-common.h: ... here.
|
||||
* c-typeck.c (build_external_ref): Don't assemble_external nor
|
||||
mark a tree as used if skip_evaluation is set.
|
||||
* c-parse.in (typeof): New non-terminal to set skip_evaluation
|
||||
around TYPEOF.
|
||||
(typespec_nonreserved_nonattr): Use it.
|
||||
|
||||
2002-09-01 Marek Michalkiewicz <marekm@amelek.gda.pl>
|
||||
|
||||
2002-08-13 Denis Chertykov <denisc@overta.ru>
|
||||
|
|
|
@ -464,6 +464,11 @@ extern int warn_conversion;
|
|||
|
||||
extern int warn_long_long;
|
||||
|
||||
/* Nonzero means the expression being parsed will never be evaluated.
|
||||
This is a count, since unevaluated expressions can nest. */
|
||||
|
||||
extern int skip_evaluation;
|
||||
|
||||
/* C types are partitioned into three subsets: object, function, and
|
||||
incomplete types. */
|
||||
#define C_TYPE_OBJECT_P(type) \
|
||||
|
|
|
@ -534,6 +534,10 @@ alignof:
|
|||
ALIGNOF { skip_evaluation++; }
|
||||
;
|
||||
|
||||
typeof:
|
||||
TYPEOF { skip_evaluation++; }
|
||||
;
|
||||
|
||||
cast_expr:
|
||||
unary_expr
|
||||
| '(' typename ')' cast_expr %prec UNARY
|
||||
|
@ -1376,10 +1380,10 @@ ifobjc
|
|||
| non_empty_protocolrefs
|
||||
{ $$ = get_object_reference ($1); }
|
||||
end ifobjc
|
||||
| TYPEOF '(' expr ')'
|
||||
{ $$ = TREE_TYPE ($3); }
|
||||
| TYPEOF '(' typename ')'
|
||||
{ $$ = groktypename ($3); }
|
||||
| typeof '(' expr ')'
|
||||
{ skip_evaluation--; $$ = TREE_TYPE ($3); }
|
||||
| typeof '(' typename ')'
|
||||
{ skip_evaluation--; $$ = groktypename ($3); }
|
||||
;
|
||||
|
||||
/* typespec_nonreserved_attr does not exist. */
|
||||
|
|
|
@ -287,11 +287,6 @@ extern int current_function_returns_null;
|
|||
|
||||
extern int current_function_returns_abnormally;
|
||||
|
||||
/* Nonzero means the expression being parsed will never be evaluated.
|
||||
This is a count, since unevaluated expressions can nest. */
|
||||
|
||||
extern int skip_evaluation;
|
||||
|
||||
/* Nonzero means `$' can be in an identifier. */
|
||||
|
||||
extern int dollars_in_ident;
|
||||
|
|
|
@ -1493,7 +1493,8 @@ build_external_ref (id, fun)
|
|||
if (TREE_TYPE (ref) == error_mark_node)
|
||||
return error_mark_node;
|
||||
|
||||
assemble_external (ref);
|
||||
if (!skip_evaluation)
|
||||
assemble_external (ref);
|
||||
TREE_USED (ref) = 1;
|
||||
|
||||
if (TREE_CODE (ref) == CONST_DECL)
|
||||
|
|
Loading…
Reference in New Issue