@@ -42,11 +42,10 @@ pointer_typet select_pointer_typet::specialize_generics(
42
42
&generic_parameter_specialization_map,
43
43
generic_parameter_recursion_trackingt &visited_nodes) const
44
44
{
45
- if (is_java_generic_parameter (pointer_type))
45
+ auto parameter = type_try_dynamic_cast<java_generic_parametert>(pointer_type);
46
+ if (parameter != nullptr )
46
47
{
47
- const java_generic_parametert ¶meter =
48
- to_java_generic_parameter (pointer_type);
49
- const irep_idt ¶meter_name = parameter.get_name ();
48
+ const irep_idt ¶meter_name = parameter->get_name ();
50
49
51
50
// avoid infinite recursion by looking at each generic argument from
52
51
// previous assignments
@@ -82,26 +81,27 @@ pointer_typet select_pointer_typet::specialize_generics(
82
81
visited_nodes.erase (parameter_name);
83
82
return returned_type;
84
83
}
85
- else if (pointer_type.subtype ().id () == ID_struct_tag)
84
+
85
+ auto subtype =
86
+ type_try_dynamic_cast<struct_tag_typet>(pointer_type.subtype ());
87
+ if (subtype != nullptr && is_java_array_tag (subtype->get_identifier ()))
86
88
{
87
89
// if the pointer is an array, recursively specialize its element type
88
- const auto &array_subtype = to_struct_tag_type (pointer_type.subtype ());
89
- if (is_java_array_tag (array_subtype.get_identifier ()))
90
+ const auto *array_element_type =
91
+ type_try_dynamic_cast<pointer_typet>(java_array_element_type (*subtype));
92
+ if (array_element_type != nullptr )
90
93
{
91
- const typet &array_element_type = java_array_element_type (array_subtype);
92
- if (array_element_type.id () == ID_pointer)
93
- {
94
- const pointer_typet &new_array_type = specialize_generics (
95
- to_pointer_type (array_element_type),
96
- generic_parameter_specialization_map,
97
- visited_nodes);
98
-
99
- pointer_typet replacement_array_type = java_array_type (' a' );
100
- replacement_array_type.subtype ().set (ID_element_type, new_array_type);
101
- return replacement_array_type;
102
- }
94
+ const pointer_typet &new_array_type = specialize_generics (
95
+ *array_element_type,
96
+ generic_parameter_specialization_map,
97
+ visited_nodes);
98
+
99
+ pointer_typet replacement_array_type = java_array_type (' a' );
100
+ replacement_array_type.subtype ().set (ID_element_type, new_array_type);
101
+ return replacement_array_type;
103
102
}
104
103
}
104
+
105
105
return pointer_type;
106
106
}
107
107
0 commit comments