103 s4o.print(s4o.indent_spaces); |
103 s4o.print(s4o.indent_spaces); |
104 s4o.print("static const "); |
104 s4o.print("static const "); |
105 |
105 |
106 current_mode = typedecl_am; |
106 current_mode = typedecl_am; |
107 array_specification->accept(*this); |
107 array_specification->accept(*this); |
108 |
|
109 s4o.print(" temp = "); |
108 s4o.print(" temp = "); |
110 |
109 |
111 init_array_values(array_initialization); |
110 init_array_values(array_initialization); |
112 |
111 |
113 s4o.print(";\n"); |
112 s4o.print(";\n"); |
186 return NULL; |
185 return NULL; |
187 } |
186 } |
188 |
187 |
189 /* ARRAY '[' array_subrange_list ']' OF non_generic_type_name */ |
188 /* ARRAY '[' array_subrange_list ']' OF non_generic_type_name */ |
190 void *visit(array_specification_c *symbol) { |
189 void *visit(array_specification_c *symbol) { |
191 symbol->array_subrange_list->accept(*this); |
190 identifier_c* type_name; |
192 switch (current_mode) { |
191 switch (current_mode) { |
193 case arraysize_am: |
192 case arraysize_am: |
|
193 symbol->array_subrange_list->accept(*this); |
194 array_base_type = symbol->non_generic_type_name; |
194 array_base_type = symbol->non_generic_type_name; |
195 array_default_value = (symbol_c *)symbol->non_generic_type_name->accept(*type_initial_value_c::instance());; |
195 array_default_value = (symbol_c *)symbol->non_generic_type_name->accept(*type_initial_value_c::instance());; |
196 if (array_default_value == NULL) ERROR; |
196 if (array_default_value == NULL) ERROR; |
197 break; |
197 break; |
|
198 case typedecl_am: |
|
199 s4o.print("__"); |
|
200 symbol->non_generic_type_name->accept(*this); |
|
201 symbol->array_subrange_list->accept(*this); |
|
202 break; |
198 default: |
203 default: |
|
204 symbol->array_subrange_list->accept(*this); |
199 break; |
205 break; |
200 } |
206 } |
201 return NULL; |
207 return NULL; |
202 } |
208 } |
203 |
209 |
204 /* signed_integer DOTDOT signed_integer */ |
210 /* signed_integer DOTDOT signed_integer */ |
205 //SYM_REF2(subrange_c, lower_limit, upper_limit) |
211 //SYM_REF2(subrange_c, lower_limit, upper_limit) |
206 void *visit(subrange_c *symbol) { |
212 void *visit(subrange_c *symbol) { |
|
213 int dimension = extract_integer(symbol->upper_limit) - extract_integer(symbol->lower_limit) + 1; |
207 switch (current_mode) { |
214 switch (current_mode) { |
208 case arraysize_am: |
215 case arraysize_am: |
209 array_size *= extract_integer(symbol->upper_limit) - extract_integer(symbol->lower_limit) + 1; |
216 array_size *= dimension; |
|
217 break; |
|
218 case typedecl_am: |
|
219 s4o.print("_"); |
|
220 s4o.print_integer(dimension); |
210 break; |
221 break; |
211 default: |
222 default: |
212 break; |
223 break; |
213 } |
224 } |
214 return NULL; |
225 return NULL; |
1377 void_type_init(); |
1388 void_type_init(); |
1378 |
1389 |
1379 return NULL; |
1390 return NULL; |
1380 } |
1391 } |
1381 |
1392 |
|
1393 /* ARRAY '[' array_subrange_list ']' OF non_generic_type_name */ |
|
1394 void *visit(array_specification_c *symbol) { |
|
1395 s4o.print("__"); |
|
1396 symbol->non_generic_type_name->accept(*this); |
|
1397 symbol->array_subrange_list->accept(*this); |
|
1398 return NULL; |
|
1399 } |
|
1400 |
|
1401 /* signed_integer DOTDOT signed_integer */ |
|
1402 //SYM_REF2(subrange_c, lower_limit, upper_limit) |
|
1403 void *visit(subrange_c *symbol) { |
|
1404 int dimension = extract_integer(symbol->upper_limit) - extract_integer(symbol->lower_limit) + 1; |
|
1405 s4o.print("_"); |
|
1406 print_integer(dimension); |
|
1407 return NULL; |
|
1408 } |
|
1409 |
1382 /* var1_list ':' initialized_structure */ |
1410 /* var1_list ':' initialized_structure */ |
1383 // SYM_REF2(structured_var_init_decl_c, var1_list, initialized_structure) |
1411 // SYM_REF2(structured_var_init_decl_c, var1_list, initialized_structure) |
1384 void *visit(structured_var_init_decl_c *symbol) { |
1412 void *visit(structured_var_init_decl_c *symbol) { |
1385 TRACE("structured_var_init_decl_c"); |
1413 TRACE("structured_var_init_decl_c"); |
1386 /* Please read the comments inside the var1_init_decl_c |
1414 /* Please read the comments inside the var1_init_decl_c |
1519 |
1547 |
1520 return NULL; |
1548 return NULL; |
1521 } |
1549 } |
1522 |
1550 |
1523 void *visit(array_initial_elements_list_c *symbol) { |
1551 void *visit(array_initial_elements_list_c *symbol) { |
1524 if (wanted_varformat == localinit_vf) { |
1552 if (wanted_varformat == localinit_vf || wanted_varformat == constructorinit_vf) { |
1525 generate_c_array_initialization_c *array_initialization = new generate_c_array_initialization_c(&s4o); |
1553 generate_c_array_initialization_c *array_initialization = new generate_c_array_initialization_c(&s4o); |
1526 array_initialization->init_array_size(this->current_var_type_symbol); |
1554 array_initialization->init_array_size(this->current_var_type_symbol); |
1527 array_initialization->init_array_values(this->current_var_init_symbol); |
1555 array_initialization->init_array_values(this->current_var_init_symbol); |
1528 delete array_initialization; |
1556 delete array_initialization; |
1529 } |
1557 } |
1950 } |
1978 } |
1951 if (this->current_var_init_symbol != NULL) { |
1979 if (this->current_var_init_symbol != NULL) { |
1952 s4o.print(nv->get()); |
1980 s4o.print(nv->get()); |
1953 s4o.print(INIT_GLOBAL); |
1981 s4o.print(INIT_GLOBAL); |
1954 s4o.print("("); |
1982 s4o.print("("); |
|
1983 this->current_var_type_symbol->accept(*this); |
|
1984 s4o.print(","); |
1955 if (symbol->global_var_name != NULL) |
1985 if (symbol->global_var_name != NULL) |
1956 symbol->global_var_name->accept(*this); |
1986 symbol->global_var_name->accept(*this); |
1957 else |
1987 else |
1958 symbol->location->accept(*this); |
1988 symbol->location->accept(*this); |
1959 s4o.print(","); |
1989 s4o.print(",__INITIAL_VALUE("); |
1960 this->current_var_init_symbol->accept(*this); |
1990 this->current_var_init_symbol->accept(*this); |
|
1991 s4o.print(")"); |
1961 print_retain(); |
1992 print_retain(); |
1962 s4o.print(")"); |
1993 s4o.print(")"); |
1963 } |
1994 } |
1964 break; |
1995 break; |
1965 |
1996 |
2011 for(int i = 0; i < list->n; i++) { |
2042 for(int i = 0; i < list->n; i++) { |
2012 s4o.print(nv->get()); |
2043 s4o.print(nv->get()); |
2013 |
2044 |
2014 s4o.print(INIT_GLOBAL); |
2045 s4o.print(INIT_GLOBAL); |
2015 s4o.print("("); |
2046 s4o.print("("); |
|
2047 this->current_var_type_symbol->accept(*this); |
|
2048 s4o.print(","); |
2016 list->elements[i]->accept(*this); |
2049 list->elements[i]->accept(*this); |
2017 s4o.print(","); |
2050 s4o.print(",__INITIAL_VALUE("); |
2018 this->current_var_init_symbol->accept(*this); |
2051 this->current_var_init_symbol->accept(*this); |
|
2052 s4o.print(")"); |
2019 print_retain(); |
2053 print_retain(); |
2020 s4o.print(")"); |
2054 s4o.print(")"); |
2021 #if 0 |
2055 #if 0 |
2022 /* The following code would be for globalinit_vf !! |
2056 /* The following code would be for globalinit_vf !! |
2023 * But it is not currently required... |
2057 * But it is not currently required... |