stage4/generate_c/generate_c_st.cc
changeset 377 60b012b7793f
parent 376 7dcbd8418771
child 382 ac6dfec701c9
--- 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;
 }