diff options
author | Roger Sayle <roger@eyesopen.com> | 2005-05-09 20:48:33 +0000 |
---|---|---|
committer | Roger Sayle <sayle@gcc.gnu.org> | 2005-05-09 20:48:33 +0000 |
commit | 43f6dfd3ec224e73a7175987f651b3d455f7803f (patch) | |
tree | 55b63c7bc470ab9a0ee49ea53a931e7a2f5a48d4 /gcc/c-parser.c | |
parent | 32df413ae734d59d5579b05b1751ebe7a79ac014 (diff) | |
download | gcc-43f6dfd3ec224e73a7175987f651b3d455f7803f.zip gcc-43f6dfd3ec224e73a7175987f651b3d455f7803f.tar.gz gcc-43f6dfd3ec224e73a7175987f651b3d455f7803f.tar.bz2 |
c-tree.h (parser_build_unary_op): New prototype.
* c-tree.h (parser_build_unary_op): New prototype.
* c-typeck.c (parser_build_unary_op): New function to construct
a unary operation in the C parser.
* c-parser.c (c_parser_unary_expression): Use the new function
parser_build_unary_op when appropriate.
From-SVN: r99471
Diffstat (limited to 'gcc/c-parser.c')
-rw-r--r-- | gcc/c-parser.c | 71 |
1 files changed, 23 insertions, 48 deletions
diff --git a/gcc/c-parser.c b/gcc/c-parser.c index 7774b72..96bab46 100644 --- a/gcc/c-parser.c +++ b/gcc/c-parser.c @@ -4495,66 +4495,45 @@ c_parser_unary_expression (c_parser *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 (0, "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; + 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); @@ -4563,14 +4542,14 @@ c_parser_unary_expression (c_parser *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) { @@ -4586,18 +4565,14 @@ c_parser_unary_expression (c_parser *parser) 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); } |