File tree Expand file tree Collapse file tree 4 files changed +20
-9
lines changed
unit/solvers/smt2_incremental Expand file tree Collapse file tree 4 files changed +20
-9
lines changed Original file line number Diff line number Diff line change @@ -1270,7 +1270,8 @@ void c_typecheck_baset::typecheck_c_enum_type(typet &type)
12701270 // we also track min and max to find a nice base type
12711271 mp_integer value=0 , min_value=0 , max_value=0 ;
12721272
1273- std::list<c_enum_typet::c_enum_membert> enum_members;
1273+ std::vector<c_enum_typet::c_enum_membert> enum_members;
1274+ enum_members.reserve (as_expr.operands ().size ());
12741275
12751276 // We need to determine a width, and a signedness
12761277 // to obtain an 'underlying type'.
@@ -1413,14 +1414,11 @@ void c_typecheck_baset::typecheck_c_enum_type(typet &type)
14131414 enum_tag_symbol.is_file_local =true ;
14141415 enum_tag_symbol.base_name =base_name;
14151416
1416- // throw in the enum members as 'body'
1417- irept::subt &body=enum_tag_symbol.type .add (ID_body).get_sub ();
1418-
1419- for (const auto &member : enum_members)
1420- body.push_back (member);
1421-
14221417 enum_tag_symbol.type .add_subtype () = underlying_type;
14231418
1419+ // throw in the enum members as 'body'
1420+ to_c_enum_type (enum_tag_symbol.type ).members () = std::move (enum_members);
1421+
14241422 // is it in the symbol table already?
14251423 symbolt *existing_symbol = symbol_table.get_writeable (identifier);
14261424
Original file line number Diff line number Diff line change @@ -274,6 +274,17 @@ class c_enum_typet : public type_with_subtypet
274274
275275 typedef std::vector<c_enum_membert> memberst;
276276
277+ c_enum_typet (typet _subtype, memberst enum_members)
278+ : c_enum_typet(std::move(_subtype))
279+ {
280+ members () = std::move (enum_members);
281+ }
282+
283+ memberst &members ()
284+ {
285+ return reinterpret_cast <memberst &>(add (ID_body).get_sub ());
286+ }
287+
277288 const memberst &members () const
278289 {
279290 return (const memberst &)(find (ID_body).get_sub ());
Original file line number Diff line number Diff line change @@ -36,7 +36,8 @@ static type_symbolt make_c_enum_type_symbol(std::size_t underlying_size)
3636 const signedbv_typet underlying_type{underlying_size};
3737 c_enum_typet enum_type{underlying_type};
3838
39- auto &members = enum_type.add (ID_body).get_sub ();
39+ auto &members = enum_type.members ();
40+ members.reserve (20 );
4041
4142 for (unsigned int i = 0 ; i < 20 ; ++i)
4243 {
Original file line number Diff line number Diff line change @@ -15,7 +15,8 @@ static c_enum_typet make_c_enum_type(
1515{
1616 c_enum_typet enum_type{underlying_type};
1717
18- auto &members = enum_type.add (ID_body).get_sub ();
18+ auto &members = enum_type.members ();
19+ members.reserve (value_count);
1920
2021 for (unsigned int i = 0 ; i < value_count; ++i)
2122 {
You can’t perform that action at this time.
0 commit comments