Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6bd0953

Browse files
ubaidskAgent-Hellboy
authored andcommitted
C: Support stride and offset in generate_array_decl()
1 parent adf3b7d commit 6bd0953

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

src/libasr/codegen/asr_to_c.cpp

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -117,23 +117,25 @@ class ASRToCVisitor : public BaseCCPPVisitor<ASRToCVisitor>
117117
}
118118
sub += indent + std::string(v_m_name) + "->data = " + std::string(v_m_name) + "_data;\n";
119119
sub += indent + std::string(v_m_name) + "->n_dims = " + std::to_string(n_dims) + ";\n";
120-
for (int i = 0; i < n_dims; i++) {
120+
sub += indent + std::string(v_m_name) + "->offset = " + std::to_string(0) + ";\n";
121+
std::string stride = "1";
122+
for (int i = n_dims - 1; i >= 0; i--) {
123+
std::string start = "1", length = "0";
121124
if( m_dims[i].m_start ) {
122125
this->visit_expr(*m_dims[i].m_start);
123-
sub += indent + std::string(v_m_name) +
124-
"->dims[" + std::to_string(i) + "].lower_bound = " + src + ";\n";
125-
} else {
126-
sub += indent + std::string(v_m_name) +
127-
"->dims[" + std::to_string(i) + "].lower_bound = 0" + ";\n";
126+
start = src;
128127
}
129128
if( m_dims[i].m_length ) {
130129
this->visit_expr(*m_dims[i].m_length);
131-
sub += indent + std::string(v_m_name) +
132-
"->dims[" + std::to_string(i) + "].length = " + src + ";\n";
133-
} else {
134-
sub += indent + std::string(v_m_name) +
135-
"->dims[" + std::to_string(i) + "].length = 0" + ";\n";
130+
length = src;
136131
}
132+
sub += indent + std::string(v_m_name) +
133+
"->dims[" + std::to_string(i) + "].lower_bound = " + start + ";\n";
134+
sub += indent + std::string(v_m_name) +
135+
"->dims[" + std::to_string(i) + "].length = " + length + ";\n";
136+
sub += indent + std::string(v_m_name) +
137+
"->dims[" + std::to_string(i) + "].stride = " + stride + ";\n";
138+
stride = "(" + stride + "*" + length + ")";
137139
}
138140
sub.pop_back();
139141
sub.pop_back();

0 commit comments

Comments
 (0)