]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - gcc/c/c-parser.c
This patch rewrites the old VEC macro-based interface into a new one
[thirdparty/gcc.git] / gcc / c / c-parser.c
index bfa98afef01fa62f69374a0de2d646700adb7664..d85bff0a2d982081773fa27ae194e7219c6aef9d 100644 (file)
@@ -1178,9 +1178,9 @@ static struct c_expr c_parser_transaction_expression (c_parser *, enum rid);
 static tree c_parser_transaction_cancel (c_parser *);
 static struct c_expr c_parser_expression (c_parser *);
 static struct c_expr c_parser_expression_conv (c_parser *);
-static VEC(tree,gc) *c_parser_expr_list (c_parser *, bool, bool,
-                                        VEC(tree,gc) **, location_t *,
-                                        tree *);
+static vec<tree, va_gc> *c_parser_expr_list (c_parser *, bool, bool,
+                                            vec<tree, va_gc> **, location_t *,
+                                            tree *);
 static void c_parser_omp_construct (c_parser *);
 static void c_parser_omp_threadprivate (c_parser *);
 static void c_parser_omp_barrier (c_parser *);
@@ -3540,7 +3540,7 @@ c_parser_attributes (c_parser *parser)
             || c_parser_next_token_is (parser, CPP_KEYWORD))
        {
          tree attr, attr_name, attr_args;
-         VEC(tree,gc) *expr_list;
+         vec<tree, va_gc> *expr_list;
          if (c_parser_next_token_is (parser, CPP_COMMA))
            {
              c_parser_consume_token (parser);
@@ -6123,10 +6123,10 @@ c_parser_alignof_expression (c_parser *parser)
    stores the arguments in CEXPR_LIST.  */
 static bool
 c_parser_get_builtin_args (c_parser *parser, const char *bname,
-                          VEC(c_expr_t,gc) **ret_cexpr_list)
+                          vec<c_expr_t, va_gc> **ret_cexpr_list)
 {
   location_t loc = c_parser_peek_token (parser)->location;
-  VEC (c_expr_t,gc) *cexpr_list;
+  vec<c_expr_t, va_gc> *cexpr_list;
   c_expr_t expr;
 
   *ret_cexpr_list = NULL;
@@ -6145,7 +6145,7 @@ c_parser_get_builtin_args (c_parser *parser, const char *bname,
     }
 
   expr = c_parser_expr_no_commas (parser, NULL);
-  cexpr_list = VEC_alloc (c_expr_t, gc, 1);
+  vec_alloc (cexpr_list, 1);
   C_EXPR_APPEND (cexpr_list, expr);
   while (c_parser_next_token_is (parser, CPP_COMMA))
     {
@@ -6511,7 +6511,7 @@ c_parser_postfix_expression (c_parser *parser)
          break;
        case RID_CHOOSE_EXPR:
          {
-           VEC (c_expr_t, gc) *cexpr_list;
+           vec<c_expr_t, va_gc> *cexpr_list;
            c_expr_t *e1_p, *e2_p, *e3_p;
            tree c;
 
@@ -6524,7 +6524,7 @@ c_parser_postfix_expression (c_parser *parser)
                break;
              }
 
-           if (VEC_length (c_expr_t, cexpr_list) != 3)
+           if (vec_safe_length (cexpr_list) != 3)
              {
                error_at (loc, "wrong number of arguments to "
                               "%<__builtin_choose_expr%>");
@@ -6532,9 +6532,9 @@ c_parser_postfix_expression (c_parser *parser)
                break;
              }
 
-           e1_p = &VEC_index (c_expr_t, cexpr_list, 0);
-           e2_p = &VEC_index (c_expr_t, cexpr_list, 1);
-           e3_p = &VEC_index (c_expr_t, cexpr_list, 2);
+           e1_p = &(*cexpr_list)[0];
+           e2_p = &(*cexpr_list)[1];
+           e3_p = &(*cexpr_list)[2];
 
            c = e1_p->value;
            mark_exp_read (e2_p->value);
@@ -6594,7 +6594,7 @@ c_parser_postfix_expression (c_parser *parser)
          break;
        case RID_BUILTIN_COMPLEX:
          {
-           VEC(c_expr_t, gc) *cexpr_list;
+           vec<c_expr_t, va_gc> *cexpr_list;
            c_expr_t *e1_p, *e2_p;
 
            c_parser_consume_token (parser);
@@ -6606,7 +6606,7 @@ c_parser_postfix_expression (c_parser *parser)
                break;
              }
 
-           if (VEC_length (c_expr_t, cexpr_list) != 2)
+           if (vec_safe_length (cexpr_list) != 2)
              {
                error_at (loc, "wrong number of arguments to "
                               "%<__builtin_complex%>");
@@ -6614,8 +6614,8 @@ c_parser_postfix_expression (c_parser *parser)
                break;
              }
 
-           e1_p = &VEC_index (c_expr_t, cexpr_list, 0);
-           e2_p = &VEC_index (c_expr_t, cexpr_list, 1);
+           e1_p = &(*cexpr_list)[0];
+           e2_p = &(*cexpr_list)[1];
 
            mark_exp_read (e1_p->value);
            if (TREE_CODE (e1_p->value) == EXCESS_PRECISION_EXPR)
@@ -6655,7 +6655,7 @@ c_parser_postfix_expression (c_parser *parser)
          }
        case RID_BUILTIN_SHUFFLE:
          {
-           VEC(c_expr_t,gc) *cexpr_list;
+           vec<c_expr_t, va_gc> *cexpr_list;
            unsigned int i;
            c_expr_t *p;
 
@@ -6668,21 +6668,21 @@ c_parser_postfix_expression (c_parser *parser)
                break;
              }
 
-           FOR_EACH_VEC_ELT (c_expr_t, cexpr_list, i, p)
+           FOR_EACH_VEC_SAFE_ELT (cexpr_list, i, p)
              mark_exp_read (p->value);
 
-           if (VEC_length (c_expr_t, cexpr_list) == 2)
+           if (vec_safe_length (cexpr_list) == 2)
              expr.value =
                c_build_vec_perm_expr
-                 (loc, VEC_index (c_expr_t, cexpr_list, 0).value,
-                  NULL_TREE, VEC_index (c_expr_t, cexpr_list, 1).value);
+                 (loc, (*cexpr_list)[0].value,
+                  NULL_TREE, (*cexpr_list)[1].value);
 
-           else if (VEC_length (c_expr_t, cexpr_list) == 3)
+           else if (vec_safe_length (cexpr_list) == 3)
              expr.value =
                c_build_vec_perm_expr
-                 (loc, VEC_index (c_expr_t, cexpr_list, 0).value,
-                  VEC_index (c_expr_t, cexpr_list, 1).value,
-                  VEC_index (c_expr_t, cexpr_list, 2).value);
+                 (loc, (*cexpr_list)[0].value,
+                  (*cexpr_list)[1].value,
+                  (*cexpr_list)[2].value);
            else
              {
                error_at (loc, "wrong number of arguments to "
@@ -6872,8 +6872,8 @@ c_parser_postfix_expression_after_primary (c_parser *parser,
   location_t sizeof_arg_loc[3];
   tree sizeof_arg[3];
   unsigned int i;
-  VEC(tree,gc) *exprlist;
-  VEC(tree,gc) *origtypes;
+  vec<tree, va_gc> *exprlist;
+  vec<tree, va_gc> *origtypes;
   while (true)
     {
       location_t op_loc = c_parser_peek_token (parser)->location;
@@ -6922,7 +6922,7 @@ c_parser_postfix_expression_after_primary (c_parser *parser,
              && DECL_FUNCTION_CODE (orig_expr.value) == BUILT_IN_CONSTANT_P)
            expr.original_code = C_MAYBE_CONST_EXPR;
          expr.original_type = NULL;
-         if (exprlist != NULL)
+         if (exprlist)
            {
              release_tree_vector (exprlist);
              release_tree_vector (origtypes);
@@ -7069,13 +7069,13 @@ c_parser_expression_conv (c_parser *parser)
      nonempty-expr-list , assignment-expression
 */
 
-static VEC(tree,gc) *
+static vec<tree, va_gc> *
 c_parser_expr_list (c_parser *parser, bool convert_p, bool fold_p,
-                   VEC(tree,gc) **p_orig_types, location_t *sizeof_arg_loc,
-                   tree *sizeof_arg)
+                   vec<tree, va_gc> **p_orig_types,
+                   location_t *sizeof_arg_loc, tree *sizeof_arg)
 {
-  VEC(tree,gc) *ret;
-  VEC(tree,gc) *orig_types;
+  vec<tree, va_gc> *ret;
+  vec<tree, va_gc> *orig_types;
   struct c_expr expr;
   location_t loc = c_parser_peek_token (parser)->location;
   location_t cur_sizeof_arg_loc = UNKNOWN_LOCATION;
@@ -7095,9 +7095,9 @@ c_parser_expr_list (c_parser *parser, bool convert_p, bool fold_p,
     expr = default_function_array_read_conversion (loc, expr);
   if (fold_p)
     expr.value = c_fully_fold (expr.value, false, NULL);
-  VEC_quick_push (tree, ret, expr.value);
-  if (orig_types != NULL)
-    VEC_quick_push (tree, orig_types, expr.original_type);
+  ret->quick_push (expr.value);
+  if (orig_types)
+    orig_types->quick_push (expr.original_type);
   if (sizeof_arg != NULL
       && cur_sizeof_arg_loc != UNKNOWN_LOCATION
       && expr.original_code == SIZEOF_EXPR)
@@ -7119,9 +7119,9 @@ c_parser_expr_list (c_parser *parser, bool convert_p, bool fold_p,
        expr = default_function_array_read_conversion (loc, expr);
       if (fold_p)
        expr.value = c_fully_fold (expr.value, false, NULL);
-      VEC_safe_push (tree, gc, ret, expr.value);
-      if (orig_types != NULL)
-       VEC_safe_push (tree, gc, orig_types, expr.original_type);
+      vec_safe_push (ret, expr.value);
+      if (orig_types)
+       vec_safe_push (orig_types, expr.original_type);
       if (++idx < 3
          && sizeof_arg != NULL
          && cur_sizeof_arg_loc != UNKNOWN_LOCATION
@@ -7131,7 +7131,7 @@ c_parser_expr_list (c_parser *parser, bool convert_p, bool fold_p,
          sizeof_arg_loc[idx] = cur_sizeof_arg_loc;
        }
     }
-  if (orig_types != NULL)
+  if (orig_types)
     *p_orig_types = orig_types;
   return ret;
 }
@@ -8209,13 +8209,13 @@ static tree
 c_parser_objc_keywordexpr (c_parser *parser)
 {
   tree ret;
-  VEC(tree,gc) *expr_list = c_parser_expr_list (parser, true, true,
+  vec<tree, va_gc> *expr_list = c_parser_expr_list (parser, true, true,
                                                NULL, NULL, NULL);
-  if (VEC_length (tree, expr_list) == 1)
+  if (vec_safe_length (expr_list) == 1)
     {
       /* Just return the expression, remove a level of
         indirection.  */
-      ret = VEC_index (tree, expr_list, 0);
+      ret = (*expr_list)[0];
     }
   else
     {
@@ -9923,7 +9923,7 @@ c_parser_omp_for_loop (location_t loc,
   bool fail = false, open_brace_parsed = false;
   int i, collapse = 1, nbraces = 0;
   location_t for_loc;
-  VEC(tree,gc) *for_block = make_tree_vector ();
+  vec<tree, va_gc> *for_block = make_tree_vector ();
 
   for (cl = clauses; cl; cl = OMP_CLAUSE_CHAIN (cl))
     if (OMP_CLAUSE_CODE (cl) == OMP_CLAUSE_COLLAPSE)
@@ -9955,7 +9955,7 @@ c_parser_omp_for_loop (location_t loc,
       if (c_parser_next_tokens_start_declaration (parser))
        {
          if (i > 0)
-           VEC_safe_push (tree, gc, for_block, c_begin_compound_stmt (true));
+           vec_safe_push (for_block, c_begin_compound_stmt (true));
          c_parser_declaration_or_fndef (parser, true, true, true, true, true, NULL);
          decl = check_for_loop_decls (for_loc, flag_isoc99);
          if (decl == NULL)
@@ -10186,12 +10186,12 @@ c_parser_omp_for_loop (location_t loc,
       ret = stmt;
     }
 pop_scopes:
-  while (!VEC_empty (tree, for_block))
+  while (!for_block->is_empty ())
     {
       /* FIXME diagnostics: LOC below should be the actual location of
         this particular for block.  We need to build a list of
         locations to go along with FOR_BLOCK.  */
-      stmt = c_end_compound_stmt (loc, VEC_pop (tree, for_block), true);
+      stmt = c_end_compound_stmt (loc, for_block->pop (), true);
       add_stmt (stmt);
     }
   release_tree_vector (for_block);