--- a/stage4/generate_c/generate_c_st.cc Fri Sep 09 12:03:15 2011 +0200
+++ b/stage4/generate_c/generate_c_st.cc Wed Sep 14 22:58:39 2011 +0200
@@ -223,6 +223,7 @@
/********************************/
/* B 1.3.3 - Derived data types */
/********************************/
+
/* signed_integer DOTDOT signed_integer */
void *visit(subrange_c *symbol) {
switch (wanted_casegeneration) {
@@ -233,11 +234,18 @@
symbol->upper_limit->accept(*this);
break;
default:
+ symbol->lower_limit->accept(*this);
break;
}
return NULL;
}
+/* ARRAY '[' array_subrange_list ']' OF non_generic_type_name */
+void *visit(array_specification_c *symbol) {
+ symbol->non_generic_type_name->accept(*this);
+ return NULL;
+}
+
/*********************/
/* B 1.4 - Variables */
/*********************/
@@ -367,15 +375,18 @@
/* subscript_list ',' subscript */
void *visit(subscript_list_c *symbol) {
+ array_dimension_iterator_c* array_dimension_iterator = new array_dimension_iterator_c(current_array_type);
for (int i = 0; i < symbol->n; i++) {
- s4o.print("[__");
- current_array_type->accept(*this);
- s4o.print("_TRANSIDX(");
- print_integer(i);
- s4o.print(",");
+ symbol_c* dimension = array_dimension_iterator->next();
+ if (dimension == NULL) ERROR;
+
+ s4o.print("[(");
symbol->elements[i]->accept(*this);
+ s4o.print(") - (");
+ dimension->accept(*this);
s4o.print(")]");
}
+ delete array_dimension_iterator;
return NULL;
}