Store the 'rid' value in a local variable, and pass it to functions that
handle various keywords.  This simplifies the code, and removes some
wrappers.

No functional change intended.

gcc/c/ChangeLog:

        * c-parser.cc (c_parser_sizeof_expression): Remove function.
        (c_parser_countof_expression): Remove function.
        (c_parser_unary_expression): Store the 'rid', and pass it
        directly to the function calls, without calling wrappers.

Suggested-by: Andrew Pinski <[email protected]>
Signed-off-by: Alejandro Colomar <[email protected]>
---
 gcc/c/c-parser.cc | 107 +++++++++++++++++++---------------------------
 1 file changed, 45 insertions(+), 62 deletions(-)

diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc
index d8b7beea9233..360df52967b5 100644
--- a/gcc/c/c-parser.cc
+++ b/gcc/c/c-parser.cc
@@ -1800,8 +1800,6 @@ static struct c_expr c_parser_binary_expression (c_parser 
*, struct c_expr *,
                                                 tree);
 static struct c_expr c_parser_cast_expression (c_parser *, struct c_expr *);
 static struct c_expr c_parser_unary_expression (c_parser *);
-static inline struct c_expr c_parser_sizeof_expression (c_parser *);
-static inline struct c_expr c_parser_countof_expression (c_parser *);
 static struct c_expr c_parser_sizeof_or_countof_expression (c_parser *,
                                                            enum rid);
 static struct c_expr c_parser_alignof_expression (c_parser *);
@@ -10665,71 +10663,56 @@ c_parser_unary_expression (c_parser *parser)
        }
       return ret;
     case CPP_KEYWORD:
-      switch (c_parser_peek_token (parser)->keyword)
-       {
-       case RID_COUNTOF:
-         return c_parser_countof_expression (parser);
-       case RID_SIZEOF:
-         return c_parser_sizeof_expression (parser);
-       case RID_ALIGNOF:
-         return c_parser_alignof_expression (parser);
-       case RID_BUILTIN_HAS_ATTRIBUTE:
-         return c_parser_has_attribute_expression (parser);
-       case RID_EXTENSION:
-         c_parser_consume_token (parser);
-         ext = disable_extension_diagnostics ();
-         ret = c_parser_cast_expression (parser, NULL);
-         restore_extension_diagnostics (ext);
-         return ret;
-       case RID_REALPART:
-         c_parser_consume_token (parser);
-         exp_loc = c_parser_peek_token (parser)->location;
-         op = c_parser_cast_expression (parser, NULL);
-         op = default_function_array_conversion (exp_loc, op);
-         return parser_build_unary_op (op_loc, REALPART_EXPR, op);
-       case RID_IMAGPART:
-         c_parser_consume_token (parser);
-         exp_loc = c_parser_peek_token (parser)->location;
-         op = c_parser_cast_expression (parser, NULL);
-         op = default_function_array_conversion (exp_loc, op);
-         return parser_build_unary_op (op_loc, IMAGPART_EXPR, op);
-       case RID_TRANSACTION_ATOMIC:
-       case RID_TRANSACTION_RELAXED:
-         return c_parser_transaction_expression (parser,
-             c_parser_peek_token (parser)->keyword);
-       case RID_STATIC_ASSERT:
-         c_parser_static_assert_declaration_no_semi (parser);
-         pedwarn_c23 (op_loc, OPT_Wpedantic,
-                      "ISO C does not support static assertions in "
-                      "expressions before C2Y");
-         ret.value = void_node;
-         set_c_expr_source_range (&ret, op_loc, op_loc);
-         ret.m_decimal = 0;
-         return ret;
-       default:
-         return c_parser_postfix_expression (parser);
-       }
+      {
+       enum rid rid = c_parser_peek_token (parser)->keyword;
+       switch (rid)
+         {
+         case RID_COUNTOF:
+         case RID_SIZEOF:
+           return c_parser_sizeof_or_countof_expression (parser, rid);
+         case RID_ALIGNOF:
+           return c_parser_alignof_expression (parser);
+         case RID_BUILTIN_HAS_ATTRIBUTE:
+           return c_parser_has_attribute_expression (parser);
+         case RID_EXTENSION:
+           c_parser_consume_token (parser);
+           ext = disable_extension_diagnostics ();
+           ret = c_parser_cast_expression (parser, NULL);
+           restore_extension_diagnostics (ext);
+           return ret;
+         case RID_REALPART:
+           c_parser_consume_token (parser);
+           exp_loc = c_parser_peek_token (parser)->location;
+           op = c_parser_cast_expression (parser, NULL);
+           op = default_function_array_conversion (exp_loc, op);
+           return parser_build_unary_op (op_loc, REALPART_EXPR, op);
+         case RID_IMAGPART:
+           c_parser_consume_token (parser);
+           exp_loc = c_parser_peek_token (parser)->location;
+           op = c_parser_cast_expression (parser, NULL);
+           op = default_function_array_conversion (exp_loc, op);
+           return parser_build_unary_op (op_loc, IMAGPART_EXPR, op);
+         case RID_TRANSACTION_ATOMIC:
+         case RID_TRANSACTION_RELAXED:
+           return c_parser_transaction_expression (parser, rid);
+         case RID_STATIC_ASSERT:
+           c_parser_static_assert_declaration_no_semi (parser);
+           pedwarn_c23 (op_loc, OPT_Wpedantic,
+                        "ISO C does not support static assertions in "
+                        "expressions before C2Y");
+           ret.value = void_node;
+           set_c_expr_source_range (&ret, op_loc, op_loc);
+           ret.m_decimal = 0;
+           return ret;
+         default:
+           return c_parser_postfix_expression (parser);
+         }
+      }
     default:
       return c_parser_postfix_expression (parser);
     }
 }
 
-/* Parse a sizeof expression.  */
-
-static inline struct c_expr
-c_parser_sizeof_expression (c_parser *parser)
-{
-  return c_parser_sizeof_or_countof_expression (parser, RID_SIZEOF);
-}
-
-/* Parse a _Countof expression.  */
-
-static inline struct c_expr
-c_parser_countof_expression (c_parser *parser)
-{
-  return c_parser_sizeof_or_countof_expression (parser, RID_COUNTOF);
-}
-
 /* Parse a sizeof or _Countof expression.  */
 
 static struct c_expr
-- 
2.51.0

Reply via email to