Skip to content

Commit 2fc8d24

Browse files
author
Daniel Kroening
committed
better typing for statements in code_blockt
1 parent e24d8f4 commit 2fc8d24

13 files changed

+50
-39
lines changed

src/ansi-c/c_typecheck_base.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ class c_typecheck_baset:
125125

126126
virtual void typecheck_assign(codet &expr);
127127
virtual void typecheck_asm(codet &code);
128-
virtual void typecheck_block(codet &code);
128+
virtual void typecheck_block(code_blockt &code);
129129
virtual void typecheck_break(codet &code);
130130
virtual void typecheck_continue(codet &code);
131131
virtual void typecheck_decl(codet &code);

src/ansi-c/c_typecheck_code.cpp

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ void c_typecheck_baset::typecheck_code(codet &code)
4343
else if(statement==ID_gcc_switch_case_range)
4444
typecheck_gcc_switch_case_range(code);
4545
else if(statement==ID_block)
46-
typecheck_block(code);
46+
typecheck_block(to_code_block(code));
4747
else if(statement==ID_decl_block)
4848
{
4949
}
@@ -181,23 +181,21 @@ void c_typecheck_baset::typecheck_assign(codet &code)
181181
implicit_typecast(code.op1(), code.op0().type());
182182
}
183183

184-
void c_typecheck_baset::typecheck_block(codet &code)
184+
void c_typecheck_baset::typecheck_block(code_blockt &code)
185185
{
186-
Forall_operands(it, code)
187-
typecheck_code(to_code(*it));
186+
for(auto &c : code.statements())
187+
typecheck_code(c);
188188

189189
// do decl-blocks
190190

191191
code_blockt new_ops;
192-
new_ops.operands().reserve(code.operands().size());
192+
new_ops.statements().reserve(code.statements().size());
193193

194-
Forall_operands(it1, code)
194+
for(auto &code_op : code.statements())
195195
{
196-
if(it1->is_nil())
196+
if(code_op.is_nil())
197197
continue;
198198

199-
codet &code_op=to_code(*it1);
200-
201199
if(code_op.get_statement()==ID_label)
202200
{
203201
// these may be nested
@@ -217,7 +215,7 @@ void c_typecheck_baset::typecheck_block(codet &code)
217215
new_ops.move(code_op);
218216
}
219217

220-
code.operands().swap(new_ops.operands());
218+
code.statements().swap(new_ops.statements());
221219
}
222220

223221
void c_typecheck_baset::typecheck_break(codet &code)

src/ansi-c/expr2c.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2840,12 +2840,12 @@ std::string expr2ct::convert_code_block(
28402840
std::string dest=indent_str(indent);
28412841
dest+="{\n";
28422842

2843-
forall_operands(it, src)
2843+
for(const auto &c : src.statements())
28442844
{
2845-
if(it->get(ID_statement)==ID_label)
2846-
dest+=convert_code(to_code(*it), indent);
2845+
if(c.get_statement()==ID_label)
2846+
dest+=convert_code(c, indent);
28472847
else
2848-
dest+=convert_code(to_code(*it), indent+2);
2848+
dest+=convert_code(c, indent+2);
28492849

28502850
dest+="\n";
28512851
}

src/cpp/cpp_constructor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ optionalt<codet> cpp_typecheckt::cpp_constructor(
266266

267267
tmp_this=address_of_exprt(object_tc);
268268

269-
if(block.operands().empty())
269+
if(block.statements().empty())
270270
return to_code(initializer);
271271
else
272272
{

src/cpp/cpp_typecheck.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ class cpp_typecheckt:public c_typecheck_baset
420420
virtual void typecheck_try_catch(codet &code);
421421
virtual void typecheck_member_initializer(codet &code);
422422
virtual void typecheck_decl(codet &code);
423-
virtual void typecheck_block(codet &code);
423+
virtual void typecheck_block(code_blockt &code);
424424
virtual void typecheck_ifthenelse(code_ifthenelset &code);
425425
virtual void typecheck_while(code_whilet &code);
426426
virtual void typecheck_switch(code_switcht &code);

src/cpp/cpp_typecheck_code.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,7 @@ void cpp_typecheckt::typecheck_decl(codet &code)
447447
code.swap(new_code);
448448
}
449449

450-
void cpp_typecheckt::typecheck_block(codet &code)
450+
void cpp_typecheckt::typecheck_block(code_blockt &code)
451451
{
452452
cpp_save_scopet saved_scope(cpp_scopes);
453453
cpp_scopes.new_block_scope();

src/cpp/cpp_typecheck_destructor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ codet cpp_typecheckt::dtor(const symbolt &symbol)
108108
ptrmember.operands().push_back(exprt("cpp-this"));
109109

110110
code_assignt assign(ptrmember, address);
111-
block.operands().push_back(assign);
111+
block.add(assign);
112112
continue;
113113
}
114114
}

src/goto-instrument/dump_c.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -624,7 +624,7 @@ void dump_ct::cleanup_decl(
624624
system_headers);
625625
p2s();
626626

627-
POSTCONDITION(b.operands().size()==1);
627+
POSTCONDITION(b.statements().size()==1);
628628
decl.swap(b.op0());
629629
}
630630

@@ -936,10 +936,8 @@ void dump_ct::cleanup_harness(code_blockt &b)
936936
decls.add(d);
937937
}
938938

939-
Forall_operands(it, b)
939+
for(auto &code : b.statements())
940940
{
941-
codet &code=to_code(*it);
942-
943941
if(code.get_statement()==ID_function_call)
944942
{
945943
exprt &func=to_code_function_call(code).function();

src/goto-programs/goto_convert.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -578,11 +578,8 @@ void goto_convertt::convert_block(
578578
std::size_t old_stack_size=targets.destructor_stack.size();
579579

580580
// now convert block
581-
forall_operands(it, code)
582-
{
583-
const codet &b_code=to_code(*it);
584-
convert(b_code, dest, mode);
585-
}
581+
for(const auto &s : code.statements())
582+
convert(s, dest, mode);
586583

587584
// see if we need to do any destructors -- may have been processed
588585
// in a prior break/continue/return already, don't create dead code

src/jsil/jsil_parse_tree.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,8 @@ static bool insert_at_label(
2222
const irep_idt &label,
2323
code_blockt &dest)
2424
{
25-
Forall_operands(it, dest)
25+
for(auto &c : dest.statements())
2626
{
27-
codet &c=to_code(*it);
28-
2927
if(c.get_statement()!=ID_label)
3028
continue;
3129

src/util/format_expr.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ std::ostream &format_rec(std::ostream &os, const exprt &expr)
240240
else if(statement == ID_block)
241241
{
242242
os << '{';
243-
for(const auto &s : to_code_block(code).operands())
243+
for(const auto &s : to_code_block(code).statements())
244244
os << ' ' << format(s);
245245
return os << " }";
246246
}

src/util/std_code.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,11 @@ const codet &codet::last_statement() const
111111
/// \param extra_block: The input code_blockt
112112
void code_blockt::append(const code_blockt &extra_block)
113113
{
114-
operands().reserve(operands().size()+extra_block.operands().size());
114+
statements().reserve(statements().size()+extra_block.statements().size());
115115

116-
for(const auto &operand : extra_block.operands())
116+
for(const auto &s : extra_block.statements())
117117
{
118-
add(to_code(operand));
118+
add(s);
119119
}
120120
}
121121

@@ -125,8 +125,8 @@ code_blockt create_fatal_assertion(
125125
code_blockt result;
126126
result.add(code_assertt(condition));
127127
result.add(code_assumet(condition));
128-
for(auto &op : result.operands())
129-
op.add_source_location() = loc;
128+
for(auto &s : result.statements())
129+
s.add_source_location() = loc;
130130
result.add_source_location() = loc;
131131
return result;
132132
}

src/util/std_code.h

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,21 +101,41 @@ inline codet &to_code(exprt &expr)
101101
class code_blockt:public codet
102102
{
103103
public:
104+
typedef std::vector<codet> code_operandst;
105+
106+
code_operandst &code_operands()
107+
{ return (code_operandst &)get_sub(); }
108+
109+
const code_operandst &code_operands() const
110+
{ return (const code_operandst &)get_sub(); }
111+
104112
code_blockt():codet(ID_block)
105113
{
106114
}
107115

108116
explicit code_blockt(const std::list<codet> &_list):codet(ID_block)
109117
{
110-
operandst &o=operands();
111-
reserve_operands(_list.size());
118+
auto &o=code_operands();
119+
o.reserve(_list.size());
112120
for(std::list<codet>::const_iterator
113121
it=_list.begin();
114122
it!=_list.end();
115123
it++)
116124
o.push_back(*it);
117125
}
118126

127+
code_operandst &statements()
128+
{
129+
return code_operands();
130+
}
131+
132+
const code_operandst &statements() const
133+
{
134+
return code_operands();
135+
}
136+
137+
void operands() = delete;
138+
119139
void move(codet &code)
120140
{
121141
exprt::move_to_operands(code);

0 commit comments

Comments
 (0)