diff options
author | Janus Weil <janus@gcc.gnu.org> | 2013-08-09 21:26:07 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2013-08-09 21:26:07 +0200 |
commit | 11e5274a4bb2ae1338c8b447c9880ace43aac129 (patch) | |
tree | 0ac9c4560a8ad95d76c1854f90668bda6feda0ad /gcc/fortran/class.c | |
parent | 2fa3d31bd6bb9274abaa3a7d59cc88e9a6112194 (diff) | |
download | gcc-11e5274a4bb2ae1338c8b447c9880ace43aac129.zip gcc-11e5274a4bb2ae1338c8b447c9880ace43aac129.tar.gz gcc-11e5274a4bb2ae1338c8b447c9880ace43aac129.tar.bz2 |
gfortran.h (gfc_get_code): Modified prototype.
2013-08-09 Janus Weil <janus@gcc.gnu.org>
* gfortran.h (gfc_get_code): Modified prototype.
* class.c (finalize_component, finalization_scalarizer,
finalization_get_offset, finalizer_insert_packed_call,
generate_finalization_wrapper, gfc_find_derived_vtab,
gfc_find_intrinsic_vtab): Use 'gfc_get_code'.
* io.c (match_io_iterator, match_io_element, terminate_io, get_io_list,
gfc_match_inquire): Call 'gfc_get_code' with argument.
* match.c (match_simple_forall, gfc_match_forall, gfc_match_goto,
gfc_match_nullify, gfc_match_call, match_simple_where, gfc_match_where):
Ditto.
* parse.c (new_level): Ditto.
(add_statement): Use XCNEW.
* resolve.c (resolve_entries, resolve_allocate_expr,
resolve_select_type, build_assignment, build_init_assign): Call
'gfc_get_code' with argument.
* st.c (gfc_get_code): Add argument 'op'.
* trans-expr.c (gfc_trans_class_array_init_assign): Call 'gfc_get_code'
with argument.
* trans-stmt.c (gfc_trans_allocate): Ditto.
From-SVN: r201635
Diffstat (limited to 'gcc/fortran/class.c')
-rw-r--r-- | gcc/fortran/class.c | 180 |
1 files changed, 48 insertions, 132 deletions
diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c index fb16682..629b052 100644 --- a/gcc/fortran/class.c +++ b/gcc/fortran/class.c @@ -863,7 +863,7 @@ finalize_component (gfc_expr *expr, gfc_symbol *derived, gfc_component *comp, || (comp->ts.type == BT_CLASS && CLASS_DATA (comp) && CLASS_DATA (comp)->attr.allocatable)) { - block = XCNEW (gfc_code); + block = gfc_get_code (EXEC_IF); if (*code) { (*code)->next = block; @@ -872,19 +872,12 @@ finalize_component (gfc_expr *expr, gfc_symbol *derived, gfc_component *comp, else (*code) = block; - block->loc = gfc_current_locus; - block->op = EXEC_IF; - - block->block = XCNEW (gfc_code); + block->block = gfc_get_code (EXEC_IF); block = block->block; - block->loc = gfc_current_locus; - block->op = EXEC_IF; block->expr1 = gfc_lval_expr_from_sym (fini_coarray); } - dealloc = XCNEW (gfc_code); - dealloc->op = EXEC_DEALLOCATE; - dealloc->loc = gfc_current_locus; + dealloc = gfc_get_code (EXEC_DEALLOCATE); dealloc->ext.alloc.list = gfc_get_alloc (); dealloc->ext.alloc.list->expr = e; @@ -915,10 +908,7 @@ finalize_component (gfc_expr *expr, gfc_symbol *derived, gfc_component *comp, break; gcc_assert (c); - final_wrap = XCNEW (gfc_code); - final_wrap->op = EXEC_CALL; - final_wrap->loc = gfc_current_locus; - final_wrap->loc = gfc_current_locus; + final_wrap = gfc_get_code (EXEC_CALL); final_wrap->symtree = c->initializer->symtree; final_wrap->resolved_sym = c->initializer->symtree->n.sym; final_wrap->ext.actual = gfc_get_actual_arglist (); @@ -955,9 +945,7 @@ finalization_scalarizer (gfc_symbol *array, gfc_symbol *ptr, gfc_expr *expr, *expr2; /* C_F_POINTER(). */ - block = XCNEW (gfc_code); - block->op = EXEC_CALL; - block->loc = gfc_current_locus; + block = gfc_get_code (EXEC_CALL); gfc_get_sym_tree ("c_f_pointer", sub_ns, &block->symtree, true); block->resolved_sym = block->symtree->n.sym; block->resolved_sym->attr.flavor = FL_PROCEDURE; @@ -1037,10 +1025,8 @@ finalization_get_offset (gfc_symbol *idx, gfc_symbol *idx2, gfc_symbol *offset, gfc_expr *expr, *expr2; /* offset = 0. */ - block->next = XCNEW (gfc_code); + block->next = gfc_get_code (EXEC_ASSIGN); block = block->next; - block->op = EXEC_ASSIGN; - block->loc = gfc_current_locus; block->expr1 = gfc_lval_expr_from_sym (offset); block->expr2 = gfc_get_int_expr (gfc_index_integer_kind, NULL, 0); @@ -1050,13 +1036,10 @@ finalization_get_offset (gfc_symbol *idx, gfc_symbol *idx2, gfc_symbol *offset, iter->start = gfc_get_int_expr (gfc_index_integer_kind, NULL, 1); iter->end = gfc_copy_expr (rank); iter->step = gfc_get_int_expr (gfc_index_integer_kind, NULL, 1); - block->next = XCNEW (gfc_code); + block->next = gfc_get_code (EXEC_DO); block = block->next; - block->op = EXEC_DO; - block->loc = gfc_current_locus; block->ext.iterator = iter; - block->block = gfc_get_code (); - block->block->op = EXEC_DO; + block->block = gfc_get_code (EXEC_DO); /* Loop body: offset = offset + mod (idx, sizes(idx2)) / sizes(idx2-1) * strides(idx2). */ @@ -1115,9 +1098,7 @@ finalization_get_offset (gfc_symbol *idx, gfc_symbol *idx2, gfc_symbol *offset, expr->ts = idx->ts; /* offset = offset + ... */ - block->block->next = XCNEW (gfc_code); - block->block->next->op = EXEC_ASSIGN; - block->block->next->loc = gfc_current_locus; + block->block->next = gfc_get_code (EXEC_ASSIGN); block->block->next->expr1 = gfc_lval_expr_from_sym (offset); block->block->next->expr2 = gfc_get_expr (); block->block->next->expr2->expr_type = EXPR_OP; @@ -1127,10 +1108,8 @@ finalization_get_offset (gfc_symbol *idx, gfc_symbol *idx2, gfc_symbol *offset, block->block->next->expr2->ts = idx->ts; /* After the loop: offset = offset * byte_stride. */ - block->next = XCNEW (gfc_code); + block->next = gfc_get_code (EXEC_ASSIGN); block = block->next; - block->op = EXEC_ASSIGN; - block->loc = gfc_current_locus; block->expr1 = gfc_lval_expr_from_sym (offset); block->expr2 = gfc_get_expr (); block->expr2->expr_type = EXPR_OP; @@ -1189,15 +1168,11 @@ finalizer_insert_packed_call (gfc_code *block, gfc_finalizer *fini, gfc_code *block2; int i; - block->next = XCNEW (gfc_code); + block->next = gfc_get_code (EXEC_IF); block = block->next; - block->loc = gfc_current_locus; - block->op = EXEC_IF; - block->block = XCNEW (gfc_code); + block->block = gfc_get_code (EXEC_IF); block = block->block; - block->loc = gfc_current_locus; - block->op = EXEC_IF; /* size_expr = STORAGE_SIZE (...) / NUMERIC_STORAGE_SIZE. */ size_expr = gfc_get_expr (); @@ -1274,9 +1249,7 @@ finalizer_insert_packed_call (gfc_code *block, gfc_finalizer *fini, block->expr1->value.op.op2->value.op.op2 = gfc_copy_expr (size_expr); /* IF body: call final subroutine. */ - block->next = XCNEW (gfc_code); - block->next->op = EXEC_CALL; - block->next->loc = gfc_current_locus; + block->next = gfc_get_code (EXEC_CALL); block->next->symtree = fini->proc_tree; block->next->resolved_sym = fini->proc_tree->n.sym; block->next->ext.actual = gfc_get_actual_arglist (); @@ -1284,17 +1257,13 @@ finalizer_insert_packed_call (gfc_code *block, gfc_finalizer *fini, /* ELSE. */ - block->block = XCNEW (gfc_code); + block->block = gfc_get_code (EXEC_IF); block = block->block; - block->loc = gfc_current_locus; - block->op = EXEC_IF; - block->next = XCNEW (gfc_code); + /* BLOCK ... END BLOCK. */ + block->next = gfc_get_code (EXEC_BLOCK); block = block->next; - /* BLOCK ... END BLOCK. */ - block->op = EXEC_BLOCK; - block->loc = gfc_current_locus; ns = gfc_build_block_ns (sub_ns); block->ext.block.ns = ns; block->ext.block.assoc = NULL; @@ -1347,13 +1316,10 @@ finalizer_insert_packed_call (gfc_code *block, gfc_finalizer *fini, iter->end = gfc_lval_expr_from_sym (nelem); iter->step = gfc_get_int_expr (gfc_index_integer_kind, NULL, 1); - block = XCNEW (gfc_code); + block = gfc_get_code (EXEC_DO); ns->code = block; - block->op = EXEC_DO; - block->loc = gfc_current_locus; block->ext.iterator = iter; - block->block = gfc_get_code (); - block->block->op = EXEC_DO; + block->block = gfc_get_code (EXEC_DO); /* Offset calculation for the new array: idx * size of type (in bytes). */ offset2 = gfc_get_expr (); @@ -1378,18 +1344,14 @@ finalizer_insert_packed_call (gfc_code *block, gfc_finalizer *fini, block2 = block2->next; /* ptr2 = ptr. */ - block2->next = XCNEW (gfc_code); + block2->next = gfc_get_code (EXEC_ASSIGN); block2 = block2->next; - block2->op = EXEC_ASSIGN; - block2->loc = gfc_current_locus; block2->expr1 = gfc_lval_expr_from_sym (ptr2); block2->expr2 = gfc_lval_expr_from_sym (ptr); /* Call now the user's final subroutine. */ - block->next = XCNEW (gfc_code); + block->next = gfc_get_code (EXEC_CALL); block = block->next; - block->op = EXEC_CALL; - block->loc = gfc_current_locus; block->symtree = fini->proc_tree; block->resolved_sym = fini->proc_tree->n.sym; block->ext.actual = gfc_get_actual_arglist (); @@ -1407,13 +1369,10 @@ finalizer_insert_packed_call (gfc_code *block, gfc_finalizer *fini, iter->end = gfc_lval_expr_from_sym (nelem); iter->step = gfc_get_int_expr (gfc_index_integer_kind, NULL, 1); - block->next = XCNEW (gfc_code); + block->next = gfc_get_code (EXEC_DO); block = block->next; - block->op = EXEC_DO; - block->loc = gfc_current_locus; block->ext.iterator = iter; - block->block = gfc_get_code (); - block->block->op = EXEC_DO; + block->block = gfc_get_code (EXEC_DO); /* Offset calculation of "array". */ block2 = finalization_get_offset (idx, idx2, offset, strides, sizes, @@ -1431,9 +1390,7 @@ finalizer_insert_packed_call (gfc_code *block, gfc_finalizer *fini, block2 = block2->next; /* ptr = ptr2. */ - block2->next = XCNEW (gfc_code); - block2->next->op = EXEC_ASSIGN; - block2->next->loc = gfc_current_locus; + block2->next = gfc_get_code (EXEC_ASSIGN); block2->next->expr1 = gfc_lval_expr_from_sym (ptr); block2->next->expr2 = gfc_lval_expr_from_sym (ptr2); } @@ -1695,27 +1652,21 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns, /* Set return value to 0. */ - last_code = XCNEW (gfc_code); - last_code->op = EXEC_ASSIGN; - last_code->loc = gfc_current_locus; + last_code = gfc_get_code (EXEC_ASSIGN); last_code->expr1 = gfc_lval_expr_from_sym (final); last_code->expr2 = gfc_get_int_expr (4, NULL, 0); sub_ns->code = last_code; /* Set: is_contiguous = .true. */ - last_code->next = XCNEW (gfc_code); + last_code->next = gfc_get_code (EXEC_ASSIGN); last_code = last_code->next; - last_code->op = EXEC_ASSIGN; - last_code->loc = gfc_current_locus; last_code->expr1 = gfc_lval_expr_from_sym (is_contiguous); last_code->expr2 = gfc_get_logical_expr (gfc_default_logical_kind, &gfc_current_locus, true); /* Set: sizes(0) = 1. */ - last_code->next = XCNEW (gfc_code); + last_code->next = gfc_get_code (EXEC_ASSIGN); last_code = last_code->next; - last_code->op = EXEC_ASSIGN; - last_code->loc = gfc_current_locus; last_code->expr1 = gfc_lval_expr_from_sym (sizes); last_code->expr1->ref = gfc_get_ref (); last_code->expr1->ref->type = REF_ARRAY; @@ -1740,19 +1691,14 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns, iter->start = gfc_get_int_expr (gfc_index_integer_kind, NULL, 1); iter->end = gfc_copy_expr (rank); iter->step = gfc_get_int_expr (gfc_index_integer_kind, NULL, 1); - last_code->next = XCNEW (gfc_code); + last_code->next = gfc_get_code (EXEC_DO); last_code = last_code->next; - last_code->op = EXEC_DO; - last_code->loc = gfc_current_locus; last_code->ext.iterator = iter; - last_code->block = gfc_get_code (); - last_code->block->op = EXEC_DO; + last_code->block = gfc_get_code (EXEC_DO); /* strides(idx) = _F._stride(array,dim=idx). */ - last_code->block->next = XCNEW (gfc_code); + last_code->block->next = gfc_get_code (EXEC_ASSIGN); block = last_code->block->next; - block->op = EXEC_ASSIGN; - block->loc = gfc_current_locus; block->expr1 = gfc_lval_expr_from_sym (strides); block->expr1->ref = gfc_get_ref (); @@ -1769,10 +1715,8 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns, gfc_lval_expr_from_sym (idx)); /* sizes(idx) = sizes(idx-1) * size(array,dim=idx, kind=index_kind). */ - block->next = XCNEW (gfc_code); + block->next = gfc_get_code (EXEC_ASSIGN); block = block->next; - block->op = EXEC_ASSIGN; - block->loc = gfc_current_locus; /* sizes(idx) = ... */ block->expr1 = gfc_lval_expr_from_sym (sizes); @@ -1819,15 +1763,11 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns, block->expr2->ts = idx->ts; /* if (strides (idx) /= sizes(idx-1)) is_contiguous = .false. */ - block->next = XCNEW (gfc_code); + block->next = gfc_get_code (EXEC_IF); block = block->next; - block->loc = gfc_current_locus; - block->op = EXEC_IF; - block->block = XCNEW (gfc_code); + block->block = gfc_get_code (EXEC_IF); block = block->block; - block->loc = gfc_current_locus; - block->op = EXEC_IF; /* if condition: strides(idx) /= sizes(idx-1). */ block->expr1 = gfc_get_expr (); @@ -1864,10 +1804,8 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns, = block->expr1->value.op.op2->ref->u.ar.start[0]->value.op.op1->ts; /* if body: is_contiguous = .false. */ - block->next = XCNEW (gfc_code); + block->next = gfc_get_code (EXEC_ASSIGN); block = block->next; - block->op = EXEC_ASSIGN; - block->loc = gfc_current_locus; block->expr1 = gfc_lval_expr_from_sym (is_contiguous); block->expr2 = gfc_get_logical_expr (gfc_default_logical_kind, &gfc_current_locus, false); @@ -1883,10 +1821,8 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns, gfc_commit_symbol (nelem); /* nelem = sizes (rank) - 1. */ - last_code->next = XCNEW (gfc_code); + last_code->next = gfc_get_code (EXEC_ASSIGN); last_code = last_code->next; - last_code->op = EXEC_ASSIGN; - last_code->loc = gfc_current_locus; last_code->expr1 = gfc_lval_expr_from_sym (nelem); @@ -1938,10 +1874,8 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns, gfc_commit_symbol (ptr); /* SELECT CASE (RANK (array)). */ - last_code->next = XCNEW (gfc_code); + last_code->next = gfc_get_code (EXEC_SELECT); last_code = last_code->next; - last_code->op = EXEC_SELECT; - last_code->loc = gfc_current_locus; last_code->expr1 = gfc_copy_expr (rank); block = NULL; @@ -1956,16 +1890,14 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns, /* CASE (fini_rank). */ if (block) { - block->block = XCNEW (gfc_code); + block->block = gfc_get_code (EXEC_SELECT); block = block->block; } else { - block = XCNEW (gfc_code); + block = gfc_get_code (EXEC_SELECT); last_code->block = block; } - block->loc = gfc_current_locus; - block->op = EXEC_SELECT; block->ext.block.case_list = gfc_get_case (); block->ext.block.case_list->where = gfc_current_locus; if (fini->proc_tree->n.sym->formal->sym->attr.dimension) @@ -1986,9 +1918,7 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns, rank, sub_ns); else { - block->next = XCNEW (gfc_code); - block->next->op = EXEC_CALL; - block->next->loc = gfc_current_locus; + block->next = gfc_get_code (EXEC_CALL); block->next->symtree = fini->proc_tree; block->next->resolved_sym = fini->proc_tree->n.sym; block->next->ext.actual = gfc_get_actual_arglist (); @@ -2002,16 +1932,14 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns, /* CASE DEFAULT. */ if (block) { - block->block = XCNEW (gfc_code); + block->block = gfc_get_code (EXEC_SELECT); block = block->block; } else { - block = XCNEW (gfc_code); + block = gfc_get_code (EXEC_SELECT); last_code->block = block; } - block->loc = gfc_current_locus; - block->op = EXEC_SELECT; block->ext.block.case_list = gfc_get_case (); /* Create loop. */ @@ -2020,13 +1948,10 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns, iter->start = gfc_get_int_expr (gfc_index_integer_kind, NULL, 0); iter->end = gfc_lval_expr_from_sym (nelem); iter->step = gfc_get_int_expr (gfc_index_integer_kind, NULL, 1); - block->next = XCNEW (gfc_code); + block->next = gfc_get_code (EXEC_DO); block = block->next; - block->op = EXEC_DO; - block->loc = gfc_current_locus; block->ext.iterator = iter; - block->block = gfc_get_code (); - block->block->op = EXEC_DO; + block->block = gfc_get_code (EXEC_DO); /* Offset calculation. */ block = finalization_get_offset (idx, idx2, offset, strides, sizes, @@ -2043,10 +1968,8 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns, block = block->next; /* CALL final_elemental (array). */ - block->next = XCNEW (gfc_code); + block->next = gfc_get_code (EXEC_CALL); block = block->next; - block->op = EXEC_CALL; - block->loc = gfc_current_locus; block->symtree = fini_elem->proc_tree; block->resolved_sym = fini_elem->proc_sym; block->ext.actual = gfc_get_actual_arglist (); @@ -2088,13 +2011,10 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns, iter->start = gfc_get_int_expr (gfc_index_integer_kind, NULL, 0); iter->end = gfc_lval_expr_from_sym (nelem); iter->step = gfc_get_int_expr (gfc_index_integer_kind, NULL, 1); - last_code->next = XCNEW (gfc_code); + last_code->next = gfc_get_code (EXEC_DO); last_code = last_code->next; - last_code->op = EXEC_DO; - last_code->loc = gfc_current_locus; last_code->ext.iterator = iter; - last_code->block = gfc_get_code (); - last_code->block->op = EXEC_DO; + last_code->block = gfc_get_code (EXEC_DO); /* Offset calculation. */ block = finalization_get_offset (idx, idx2, offset, strides, sizes, @@ -2126,10 +2046,8 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns, /* Call the finalizer of the ancestor. */ if (ancestor_wrapper && ancestor_wrapper->expr_type != EXPR_NULL) { - last_code->next = XCNEW (gfc_code); + last_code->next = gfc_get_code (EXEC_CALL); last_code = last_code->next; - last_code->op = EXEC_CALL; - last_code->loc = gfc_current_locus; last_code->symtree = ancestor_wrapper->symtree; last_code->resolved_sym = ancestor_wrapper->symtree->n.sym; @@ -2375,8 +2293,7 @@ gfc_find_derived_vtab (gfc_symbol *derived) copy->formal->next = gfc_get_formal_arglist (); copy->formal->next->sym = dst; /* Set up code. */ - sub_ns->code = gfc_get_code (); - sub_ns->code->op = EXEC_INIT_ASSIGN; + sub_ns->code = gfc_get_code (EXEC_INIT_ASSIGN); sub_ns->code->expr1 = gfc_lval_expr_from_sym (dst); sub_ns->code->expr2 = gfc_lval_expr_from_sym (src); /* Set initializer. */ @@ -2659,8 +2576,7 @@ gfc_find_intrinsic_vtab (gfc_typespec *ts) copy->formal->next = gfc_get_formal_arglist (); copy->formal->next->sym = dst; /* Set up code. */ - sub_ns->code = gfc_get_code (); - sub_ns->code->op = EXEC_INIT_ASSIGN; + sub_ns->code = gfc_get_code (EXEC_INIT_ASSIGN); sub_ns->code->expr1 = gfc_lval_expr_from_sym (dst); sub_ns->code->expr2 = gfc_lval_expr_from_sym (src); got_char_copy: |