File tree 3 files changed +22
-13
lines changed
3 files changed +22
-13
lines changed Original file line number Diff line number Diff line change @@ -353,7 +353,7 @@ void c_typecheck_baset::typecheck_decl(codet &code)
353
353
else
354
354
{
355
355
// build a decl-block
356
- code_blockt code_block (new_code);
356
+ auto code_block= code_blockt::from_list (new_code);
357
357
code_block.set_statement (ID_decl_block);
358
358
code.swap (code_block);
359
359
}
Original file line number Diff line number Diff line change @@ -1010,7 +1010,7 @@ void c_typecheck_baset::typecheck_expr_sizeof(exprt &expr)
1010
1010
{
1011
1011
side_effect_exprt side_effect_expr (
1012
1012
ID_statement_expression, void_type (), expr.source_location ());
1013
- code_blockt decl_block (clean_code);
1013
+ auto decl_block= code_blockt::from_list (clean_code);
1014
1014
decl_block.set_statement (ID_decl_block);
1015
1015
side_effect_expr.copy_to_operands (decl_block);
1016
1016
clean_code.clear ();
@@ -1067,7 +1067,7 @@ void c_typecheck_baset::typecheck_expr_typecast(exprt &expr)
1067
1067
{
1068
1068
side_effect_exprt side_effect_expr (
1069
1069
ID_statement_expression, void_type (), expr.source_location ());
1070
- code_blockt decl_block (clean_code);
1070
+ auto decl_block= code_blockt::from_list (clean_code);
1071
1071
decl_block.set_statement (ID_decl_block);
1072
1072
side_effect_expr.copy_to_operands (decl_block);
1073
1073
clean_code.clear ();
Original file line number Diff line number Diff line change @@ -117,15 +117,24 @@ class code_blockt:public codet
117
117
return (const code_operandst &)get_sub ();
118
118
}
119
119
120
- explicit code_blockt (const std::list<codet> &_list):codet(ID_block )
120
+ static code_blockt from_list (const std::list<codet> &_list)
121
121
{
122
- auto &o = statements ();
123
- reserve_operands (_list.size ());
124
- for (std::list<codet>::const_iterator
125
- it=_list.begin ();
126
- it!=_list.end ();
127
- it++)
128
- o.push_back (*it);
122
+ code_blockt result;
123
+ statementst &s=result.statements ();
124
+ s.reserve (_list.size ());
125
+ for (const auto &c : _list)
126
+ o.push_back (c);
127
+ return result;
128
+ }
129
+
130
+ explicit code_blockt (const std::vector<codet> &_statements):codet(ID_block)
131
+ {
132
+ operands ()=(const std::vector<exprt> &)_statements;
133
+ }
134
+
135
+ explicit code_blockt (std::vector<codet> &&_statements):codet(ID_block)
136
+ {
137
+ operands ()=std::move ((std::vector<exprt> &&)_statements);
129
138
}
130
139
131
140
void move (codet &code)
@@ -166,9 +175,9 @@ class code_blockt:public codet
166
175
const irep_idt &statement=last->get_statement ();
167
176
168
177
if (statement==ID_block &&
169
- !last-> operands ().empty ())
178
+ !to_code_block (* last). statements ().empty ())
170
179
{
171
- last=&to_code ( last-> operands ().back ());
180
+ last=&to_code_block (* last). statements ().back ());
172
181
}
173
182
else if (statement==ID_label)
174
183
{
You can’t perform that action at this time.
0 commit comments