@@ -5503,9 +5503,6 @@ class BodyVisitor : public CommonVisitor<BodyVisitor> {
5503
5503
if (!is_explicit_iterator_required) {
5504
5504
a_kind = ASRUtils::extract_kind_from_ttype_t (ASRUtils::expr_type (target));
5505
5505
}
5506
- ASR::ttype_t *a_type = ASRUtils::TYPE (ASR::make_Integer_t (al, x.base .base .loc , a_kind));
5507
- ASR::expr_t *constant_one = ASR::down_cast<ASR::expr_t >(ASR::make_IntegerConstant_t (
5508
- al, x.base .base .loc , 1 , a_type));
5509
5506
ASR::do_loop_head_t head = make_do_loop_head (loop_start, loop_end, inc, a_kind,
5510
5507
x.base .base .loc );
5511
5508
@@ -5520,18 +5517,22 @@ class BodyVisitor : public CommonVisitor<BodyVisitor> {
5520
5517
// add an assignment instruction to body to assign value of loop_src_var at an index to the loop_target_var
5521
5518
LCOMPILERS_ASSERT (current_scope->get_symbol (explicit_iter_name) != nullptr );
5522
5519
auto explicit_iter_var = ASR::make_Var_t (al, x.base .base .loc , current_scope->get_symbol (explicit_iter_name));
5520
+ ASR::ttype_t *a_type = ASRUtils::TYPE (ASR::make_Integer_t (al, x.base .base .loc , a_kind));
5521
+ ASR::expr_t *constant_one = ASR::down_cast<ASR::expr_t >(ASR::make_IntegerConstant_t (
5522
+ al, x.base .base .loc , 1 , a_type));
5523
5523
auto index_plus_one = ASR::make_IntegerBinOp_t (al, x.base .base .loc , ASRUtils::EXPR (explicit_iter_var),
5524
5524
ASR::binopType::Add, constant_one, a_type, nullptr );
5525
- auto loop_src_var = ASR::make_Var_t (al, x.base .base .loc , current_scope->resolve_symbol (loop_src_var_name));
5525
+ ASR::expr_t * loop_src_var = ASRUtils::EXPR (ASR::make_Var_t (al, x.base .base .loc , current_scope->resolve_symbol (loop_src_var_name)));
5526
+ ASR::ttype_t * loop_src_var_ttype = ASRUtils::expr_type (loop_src_var);
5526
5527
ASR::asr_t * loop_src_var_element = nullptr ;
5527
5528
if (ASR::is_a<ASR::StringLen_t>(*for_iter_type)) {
5528
5529
loop_src_var_element = ASR::make_StringItem_t (
5529
- al, x.base .base .loc , ASRUtils::EXPR ( loop_src_var) ,
5530
- ASRUtils::EXPR (index_plus_one), a_type , nullptr );
5530
+ al, x.base .base .loc , loop_src_var,
5531
+ ASRUtils::EXPR (index_plus_one), ASRUtils::get_contained_type (loop_src_var_ttype) , nullptr );
5531
5532
} else if (ASR::is_a<ASR::ListLen_t>(*for_iter_type)) {
5532
5533
loop_src_var_element = ASR::make_ListItem_t (
5533
- al, x.base .base .loc , ASRUtils::EXPR ( loop_src_var) ,
5534
- ASRUtils::EXPR (explicit_iter_var), a_type , nullptr );
5534
+ al, x.base .base .loc , loop_src_var,
5535
+ ASRUtils::EXPR (explicit_iter_var), ASRUtils::get_contained_type (loop_src_var_ttype) , nullptr );
5535
5536
}
5536
5537
auto loop_target_assignment = ASR::make_Assignment_t (al, x.base .base .loc , target, ASRUtils::EXPR (loop_src_var_element), nullptr );
5537
5538
body.push_back (al, ASRUtils::STMT (loop_target_assignment));
0 commit comments