Skip to content

Commit 49ba6bc

Browse files
committed
ASR: Use arraystorage in ArrayConstant and ArrayItem
1 parent 7a4ce8b commit 49ba6bc

File tree

5 files changed

+13
-9
lines changed

5 files changed

+13
-9
lines changed

src/libasr/ASR.asdl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,8 +273,8 @@ expr
273273

274274
| Var(symbol v)
275275

276-
| ArrayConstant(expr* args, ttype type)
277-
| ArrayItem(expr v, array_index* args, ttype type, expr? value)
276+
| ArrayConstant(expr* args, ttype type, arraystorage storage_format)
277+
| ArrayItem(expr v, array_index* args, ttype type, arraystorage storage_format, expr? value)
278278
| ArraySection(expr v, array_index* args, ttype type, expr? value)
279279
| ArraySize(expr v, expr? dim, ttype type, expr? value)
280280
| ArrayBound(expr v, expr? dim, ttype type, arraybound bound,

src/libasr/pass/implied_do_loops.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,8 @@ class ImpliedDoLoopVisitor : public PassUtils::PassVisitor<ImpliedDoLoopVisitor>
135135
ASR::expr_t* array_ref = LFortran::ASRUtils::EXPR(ASR::make_ArrayItem_t(al, arr_var->base.base.loc,
136136
ASRUtils::EXPR((ASR::asr_t*)arr_var),
137137
args.p, args.size(),
138-
array_ref_type, nullptr));
138+
array_ref_type, ASR::arraystorageType::RowMajor,
139+
nullptr));
139140
if( idoloop->m_values[i]->type == ASR::exprType::ImpliedDoLoop ) {
140141
throw LCompilersException("Pass for nested ImpliedDoLoop nodes isn't implemented yet."); // idoloop->m_values[i]->base.loc
141142
}
@@ -199,7 +200,8 @@ class ImpliedDoLoopVisitor : public PassUtils::PassVisitor<ImpliedDoLoopVisitor>
199200
ASR::expr_t* array_ref = LFortran::ASRUtils::EXPR(ASR::make_ArrayItem_t(al, arr_var->base.base.loc,
200201
ASRUtils::EXPR((ASR::asr_t*)arr_var),
201202
args.p, args.size(),
202-
array_ref_type, nullptr));
203+
array_ref_type, ASR::arraystorageType::RowMajor,
204+
nullptr));
203205
ASR::stmt_t* assign_stmt = LFortran::ASRUtils::STMT(ASR::make_Assignment_t(al, arr_var->base.base.loc, array_ref, arr_init->m_args[k], nullptr));
204206
pass_result.push_back(al, assign_stmt);
205207
ASR::expr_t* increment = LFortran::ASRUtils::EXPR(ASR::make_IntegerBinOp_t(al, arr_var->base.base.loc, idx_var, ASR::binopType::Add, const_1, LFortran::ASRUtils::expr_type(idx_var), nullptr));

src/libasr/pass/instantiate_template.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ class FunctionInstantiator : public ASR::BaseExprStmtDuplicator<FunctionInstanti
158158

159159
ASR::ttype_t *type = substitute_type(x->m_type);
160160

161-
return ASR::make_ArrayItem_t(al, x->base.base.loc, m_v, args.p, x->n_args, type, m_value);
161+
return ASR::make_ArrayItem_t(al, x->base.base.loc, m_v, args.p, x->n_args, type, ASR::arraystorageType::RowMajor, m_value);
162162
}
163163

164164
ASR::asr_t* duplicate_ListItem(ASR::ListItem_t *x) {

src/libasr/pass/pass_utils.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,8 @@ namespace LFortran {
173173
ASR::expr_t* array_ref = LFortran::ASRUtils::EXPR(ASR::make_ArrayItem_t(al,
174174
arr_expr->base.loc, arr_expr,
175175
args.p, args.size(),
176-
_type, nullptr));
176+
_type, ASR::arraystorageType::RowMajor,
177+
nullptr));
177178
return array_ref;
178179
}
179180

@@ -195,7 +196,8 @@ namespace LFortran {
195196
ASR::expr_t* arr_var = ASRUtils::EXPR(ASR::make_Var_t(al, loc, arr));
196197
ASR::expr_t* array_ref = LFortran::ASRUtils::EXPR(ASR::make_ArrayItem_t(al, loc, arr_var,
197198
args.p, args.size(),
198-
_type, nullptr));
199+
_type, ASR::arraystorageType::RowMajor,
200+
nullptr));
199201
return array_ref;
200202
}
201203

src/lpython/semantics/python_ast_to_asr.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2940,7 +2940,7 @@ class CommonVisitor : public AST::BaseVisitor<Struct> {
29402940
empty_dims.reserve(al, 1);
29412941
type = ASRUtils::duplicate_type(al, type, &empty_dims);
29422942
tmp = ASR::make_ArrayItem_t(al, x.base.base.loc, v_Var, args.p,
2943-
args.size(), type, nullptr);
2943+
args.size(), type, ASR::arraystorageType::RowMajor, nullptr);
29442944
} else {
29452945
tmp = ASR::make_ArraySection_t(al, x.base.base.loc, v_Var, args.p,
29462946
args.size(), type, nullptr);
@@ -5524,7 +5524,7 @@ class BodyVisitor : public CommonVisitor<BodyVisitor> {
55245524
ASR::ListConstant_t* list = ASR::down_cast<ASR::ListConstant_t>(arg);
55255525
ASR::expr_t **m_args = list->m_args;
55265526
size_t n_args = list->n_args;
5527-
tmp = ASR::make_ArrayConstant_t(al, x.base.base.loc, m_args, n_args, type);
5527+
tmp = ASR::make_ArrayConstant_t(al, x.base.base.loc, m_args, n_args, type, ASR::arraystorageType::RowMajor);
55285528
} else {
55295529
throw SemanticError("array accepts only list for now, got " +
55305530
ASRUtils::type_to_str(type) + " type.", x.base.base.loc);

0 commit comments

Comments
 (0)