/* A keyword. */
#define CPP_KEYWORD ((enum cpp_ttype) (N_TTYPES + 1))
-/* The number of token types, including C-specific ones. */
-#define N_C_TTYPES ((int) (CPP_KEYWORD + 1))
-
/* More information about the type of a CPP_NAME token. */
typedef enum c_id_kind {
/* An ordinary identifier. */
which is resolved in the direction of treating it as a typedef
name. If a close parenthesis follows, it is also an empty
parameter list, as the syntax does not permit empty abstract
- declarators. Otherwise, it is a parenthesised declarator (in
+ declarators. Otherwise, it is a parenthesized declarator (in
which case the analysis may be repeated inside it, recursively).
??? There is an ambiguity in a parameter declaration "int
documenting. At present we follow an accident of the old
parser's implementation, whereby the first parameter must have
some declaration specifiers other than just attributes. Thus as
- a parameter declaration it is treated as a parenthesised
+ a parameter declaration it is treated as a parenthesized
parameter named x, and as an abstract declarator it is
rejected.
else if (c_parser_next_token_is_keyword (parser, RID_CONST)
|| c_parser_next_token_is_keyword (parser, RID_RESTRICT))
{
- warning ("%E qualifier ignored on asm",
+ warning (0, "%E qualifier ignored on asm",
c_parser_peek_token (parser)->value);
quals = NULL_TREE;
c_parser_consume_token (parser);
{
int ext;
struct c_expr ret;
- ret.original_code = ERROR_MARK;
switch (c_parser_peek_token (parser)->type)
{
case CPP_PLUS_PLUS:
c_parser_consume_token (parser);
- ret.value
- = build_unary_op (PREINCREMENT_EXPR,
- c_parser_cast_expression (parser, NULL).value, 0);
- overflow_warning (ret.value);
- return ret;
+ return parser_build_unary_op (PREINCREMENT_EXPR,
+ c_parser_cast_expression (parser, NULL));
case CPP_MINUS_MINUS:
c_parser_consume_token (parser);
- ret.value
- = build_unary_op (PREDECREMENT_EXPR,
- c_parser_cast_expression (parser, NULL).value, 0);
- overflow_warning (ret.value);
- return ret;
+ return parser_build_unary_op (PREDECREMENT_EXPR,
+ c_parser_cast_expression (parser, NULL));
case CPP_AND:
c_parser_consume_token (parser);
- ret.value
- = build_unary_op (ADDR_EXPR,
- c_parser_cast_expression (parser, NULL).value, 0);
- overflow_warning (ret.value);
- return ret;
+ return parser_build_unary_op (ADDR_EXPR,
+ c_parser_cast_expression (parser, NULL));
case CPP_MULT:
c_parser_consume_token (parser);
ret.value
= build_indirect_ref (c_parser_cast_expression (parser, NULL).value,
"unary *");
+ ret.original_code = ERROR_MARK;
return ret;
case CPP_PLUS:
c_parser_consume_token (parser);
- if (!c_dialect_objc () && warn_traditional && !in_system_header)
- warning ("traditional C rejects the unary plus operator");
- ret.value
- = build_unary_op (CONVERT_EXPR,
- c_parser_cast_expression (parser, NULL).value, 0);
- overflow_warning (ret.value);
- return ret;
+ if (!c_dialect_objc () && !in_system_header)
+ warning (OPT_Wtraditional,
+ "traditional C rejects the unary plus operator");
+ return parser_build_unary_op (CONVERT_EXPR,
+ c_parser_cast_expression (parser, NULL));
case CPP_MINUS:
c_parser_consume_token (parser);
- ret.value
- = build_unary_op (NEGATE_EXPR,
- c_parser_cast_expression (parser, NULL).value, 0);
- overflow_warning (ret.value);
- return ret;
+ return parser_build_unary_op (NEGATE_EXPR,
+ c_parser_cast_expression (parser, NULL));
case CPP_COMPL:
c_parser_consume_token (parser);
- ret.value
- = build_unary_op (BIT_NOT_EXPR,
- c_parser_cast_expression (parser, NULL).value, 0);
- overflow_warning (ret.value);
- return ret;
+ return parser_build_unary_op (BIT_NOT_EXPR,
+ c_parser_cast_expression (parser, NULL));
case CPP_NOT:
c_parser_consume_token (parser);
- ret.value
- = build_unary_op (TRUTH_NOT_EXPR,
- c_parser_cast_expression (parser, NULL).value, 0);
- overflow_warning (ret.value);
- return ret;
+ return parser_build_unary_op (TRUTH_NOT_EXPR,
+ c_parser_cast_expression (parser, NULL));
case CPP_AND_AND:
/* Refer to the address of a label as a pointer. */
c_parser_consume_token (parser);
ret.value = finish_label_address_expr
(c_parser_peek_token (parser)->value);
c_parser_consume_token (parser);
- return ret;
}
else
{
c_parser_error (parser, "expected identifier");
ret.value = error_mark_node;
- return ret;
}
+ ret.original_code = ERROR_MARK;
+ return ret;
case CPP_KEYWORD:
switch (c_parser_peek_token (parser)->keyword)
{
return ret;
case RID_REALPART:
c_parser_consume_token (parser);
- ret.value
- = build_unary_op (REALPART_EXPR,
- c_parser_cast_expression (parser, NULL).value,
- 0);
- return ret;
+ return parser_build_unary_op (REALPART_EXPR,
+ c_parser_cast_expression (parser,
+ NULL));
case RID_IMAGPART:
c_parser_consume_token (parser);
- ret.value
- = build_unary_op (IMAGPART_EXPR,
- c_parser_cast_expression (parser, NULL).value,
- 0);
- return ret;
+ return parser_build_unary_op (IMAGPART_EXPR,
+ c_parser_cast_expression (parser,
+ NULL));
default:
return c_parser_postfix_expression (parser);
}
"@interface identifier (" must start "@interface identifier (
identifier ) ...": objc-methodprotolist in the first production may
- not start with a parenthesised identifier as a declarator of a data
+ not start with a parenthesized identifier as a declarator of a data
definition with no declaration specifiers if the objc-superclass,
objc-protocol-refs and objc-class-instance-variables are omitted. */
tree type = NULL_TREE;
tree sel;
tree parms = NULL_TREE;
+ bool ellipsis = false;
+
if (c_parser_next_token_is (parser, CPP_OPEN_PAREN))
{
c_parser_consume_token (parser);
{
tree tsel = sel;
tree list = NULL_TREE;
- bool ellipsis;
while (true)
{
tree atype = NULL_TREE, id, keyworddecl;
method parameters follow the C syntax, and may include '...'
to denote a variable number of arguments. */
parms = make_node (TREE_LIST);
- ellipsis = false;
while (c_parser_next_token_is (parser, CPP_COMMA))
{
struct c_parm *parm;
parms = chainon (parms,
build_tree_list (NULL_TREE, grokparm (parm)));
}
- TREE_OVERFLOW (parms) = ellipsis;
sel = list;
}
- return objc_build_method_signature (type, sel, parms);
+ return objc_build_method_signature (type, sel, parms, ellipsis);
}
/* Parse an objc-type-name.