Skip to content

Commit b4d5ff1

Browse files
author
Daniel Kroening
committed
new constructors for code_blockt
The new constructors avoid building a vector from a list. The vector is constructed directly at the call site of the constructor.
1 parent 744f918 commit b4d5ff1

File tree

3 files changed

+21
-12
lines changed

3 files changed

+21
-12
lines changed

src/ansi-c/c_typecheck_code.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ void c_typecheck_baset::typecheck_decl(codet &code)
353353
else
354354
{
355355
// build a decl-block
356-
code_blockt code_block(new_code);
356+
auto code_block=code_blockt::from_list(new_code);
357357
code_block.set_statement(ID_decl_block);
358358
code.swap(code_block);
359359
}

src/ansi-c/c_typecheck_expr.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1010,7 +1010,7 @@ void c_typecheck_baset::typecheck_expr_sizeof(exprt &expr)
10101010
{
10111011
side_effect_exprt side_effect_expr(
10121012
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);
10141014
decl_block.set_statement(ID_decl_block);
10151015
side_effect_expr.copy_to_operands(decl_block);
10161016
clean_code.clear();
@@ -1067,7 +1067,7 @@ void c_typecheck_baset::typecheck_expr_typecast(exprt &expr)
10671067
{
10681068
side_effect_exprt side_effect_expr(
10691069
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);
10711071
decl_block.set_statement(ID_decl_block);
10721072
side_effect_expr.copy_to_operands(decl_block);
10731073
clean_code.clear();

src/util/std_code.h

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,15 +105,24 @@ class code_blockt:public codet
105105
{
106106
}
107107

108-
explicit code_blockt(const std::list<codet> &_list):codet(ID_block)
109-
{
110-
operandst &o=operands();
111-
reserve_operands(_list.size());
112-
for(std::list<codet>::const_iterator
113-
it=_list.begin();
114-
it!=_list.end();
115-
it++)
116-
o.push_back(*it);
108+
static code_blockt from_list(const std::list<codet> &_list)
109+
{
110+
code_blockt result;
111+
operandst &o=result.operands();
112+
o.reserve(_list.size());
113+
for(const auto &op : _list)
114+
o.push_back(op);
115+
return result;
116+
}
117+
118+
explicit code_blockt(const std::vector<codet> &_statements):codet(ID_block)
119+
{
120+
operands()=(const std::vector<exprt> &)_statements;
121+
}
122+
123+
explicit code_blockt(std::vector<codet> &&_statements):codet(ID_block)
124+
{
125+
operands()=std::move((std::vector<exprt> &&)_statements);
117126
}
118127

119128
void move(codet &code)

0 commit comments

Comments
 (0)