diff -r 7dcbd8418771 -r 60b012b7793f stage4/generate_c/generate_c_st.cc --- 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; }