|| (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;
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;
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 ();
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;
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);
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). */
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;
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;
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 ();
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 ();
/* 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;
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 ();
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 ();
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,
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);
}
/* 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;
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 ();
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);
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 ();
= 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);
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);
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;
/* 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)
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 ();
/* 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. */
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,
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 ();
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,
/* 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;
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. */
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: