equal
deleted
inserted
replaced
81 typedefinition_t current_typedefinition; |
81 typedefinition_t current_typedefinition; |
82 |
82 |
83 typedef enum { |
83 typedef enum { |
84 none_bd, |
84 none_bd, |
85 subrangebasetype_bd, |
85 subrangebasetype_bd, |
86 subrangebasetypeexploration_bd, |
|
87 subrangetest_bd, |
86 subrangetest_bd, |
88 arraybasetype_bd, |
87 arraybasetype_bd, |
89 arraybasetypeincl_bd, |
88 arraybasetypeincl_bd, |
90 arraysubrange_bd, |
89 arraysubrange_bd, |
91 arraytranslateindex_bd |
90 arraytranslateindex_bd |
204 current_basetypedeclaration = none_bd; |
203 current_basetypedeclaration = none_bd; |
205 s4o_incl.print(" "); |
204 s4o_incl.print(" "); |
206 symbol->subrange_type_name->accept(*basedecl); |
205 symbol->subrange_type_name->accept(*basedecl); |
207 s4o_incl.print(";\n\n"); |
206 s4o_incl.print(";\n\n"); |
208 |
207 |
209 current_basetypedeclaration = subrangebasetypeexploration_bd; |
|
210 symbol->subrange_spec_init->accept(*this); |
|
211 current_basetypedeclaration = none_bd; |
|
212 |
|
213 current_type_name = symbol->subrange_type_name; |
208 current_type_name = symbol->subrange_type_name; |
214 |
209 |
215 current_basetypedeclaration = subrangetest_bd; |
210 current_basetypedeclaration = subrangetest_bd; |
216 symbol->subrange_spec_init->accept(*this); |
211 symbol->subrange_spec_init->accept(*this); |
217 current_basetypedeclaration = none_bd; |
212 current_basetypedeclaration = none_bd; |
231 /* integer_type_name '(' subrange')' */ |
226 /* integer_type_name '(' subrange')' */ |
232 void *visit(subrange_specification_c *symbol) { |
227 void *visit(subrange_specification_c *symbol) { |
233 switch (current_basetypedeclaration) { |
228 switch (current_basetypedeclaration) { |
234 case subrangebasetype_bd: |
229 case subrangebasetype_bd: |
235 symbol->integer_type_name->accept(*basedecl); |
230 symbol->integer_type_name->accept(*basedecl); |
236 break; |
|
237 case subrangebasetypeexploration_bd: |
|
238 search_base_type.explore_type(symbol->integer_type_name); |
|
239 break; |
231 break; |
240 case subrangetest_bd: |
232 case subrangetest_bd: |
241 if (symbol->subrange != NULL) { |
233 if (symbol->subrange != NULL) { |
242 current_type_name->accept(*this); |
234 current_type_name->accept(*this); |
243 s4o.print(" __CHECK_"); |
235 s4o.print(" __CHECK_"); |
245 s4o.print("("); |
237 s4o.print("("); |
246 current_type_name->accept(*this); |
238 current_type_name->accept(*this); |
247 s4o.print(" value) {\n"); |
239 s4o.print(" value) {\n"); |
248 s4o.indent_right(); |
240 s4o.indent_right(); |
249 |
241 |
250 if (search_base_type.base_is_subrange()) { |
242 if (search_base_type.type_is_subrange(symbol->integer_type_name)) { |
251 s4o.print(s4o.indent_spaces + "value = __CHECK_"); |
243 s4o.print(s4o.indent_spaces + "value = __CHECK_"); |
252 symbol->integer_type_name->accept(*this); |
244 symbol->integer_type_name->accept(*this); |
253 s4o.print("(value);\n"); |
245 s4o.print("(value);\n"); |
254 } |
246 } |
255 |
247 |
363 current_basetypedeclaration = arraysubrange_bd; |
355 current_basetypedeclaration = arraysubrange_bd; |
364 symbol->array_spec_init->accept(*this); |
356 symbol->array_spec_init->accept(*this); |
365 current_basetypedeclaration = none_bd; |
357 current_basetypedeclaration = none_bd; |
366 s4o_incl.print(";\n"); |
358 s4o_incl.print(";\n"); |
367 |
359 |
368 search_base_type.explore_type(symbol->array_spec_init); |
360 if (search_base_type.type_is_subrange(current_type_name)) { |
369 if (search_base_type.base_is_subrange()) { |
|
370 s4o.print("#define __CHECK_"); |
361 s4o.print("#define __CHECK_"); |
371 symbol->identifier->accept(*this); |
362 symbol->identifier->accept(*this); |
372 s4o.print(" __CHECK_"); |
363 s4o.print(" __CHECK_"); |
373 current_basetypedeclaration = arraybasetype_bd; |
364 current_basetypedeclaration = arraybasetype_bd; |
374 symbol->array_spec_init->accept(*this); |
365 symbol->array_spec_init->accept(*this); |