@@ -117,23 +117,25 @@ class ASRToCVisitor : public BaseCCPPVisitor<ASRToCVisitor>
117
117
}
118
118
sub += indent + std::string (v_m_name) + " ->data = " + std::string (v_m_name) + " _data;\n " ;
119
119
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" ;
121
124
if ( m_dims[i].m_start ) {
122
125
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;
128
127
}
129
128
if ( m_dims[i].m_length ) {
130
129
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;
136
131
}
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 + " )" ;
137
139
}
138
140
sub.pop_back ();
139
141
sub.pop_back ();
0 commit comments