Skip to content

Commit da6e5d7

Browse files
author
Daniel Kroening
committed
cpp_typecheckt::cpp_destructor now returns optionalt<codet> instead of an expression
1 parent fd5c528 commit da6e5d7

File tree

4 files changed

+23
-30
lines changed

4 files changed

+23
-30
lines changed

src/cpp/cpp_destructor.cpp

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Author: Daniel Kroening, [email protected]
1616
#include <util/c_types.h>
1717

1818
/// \return typechecked code
19-
codet cpp_typecheckt::cpp_destructor(
19+
optionalt<codet> cpp_typecheckt::cpp_destructor(
2020
const source_locationt &source_location,
2121
const exprt &object)
2222
{
@@ -31,22 +31,15 @@ codet cpp_typecheckt::cpp_destructor(
3131

3232
// PODs don't need a destructor
3333
if(cpp_is_pod(tmp_type))
34-
{
35-
new_code.make_nil();
36-
return new_code;
37-
}
34+
return {};
3835

3936
if(tmp_type.id()==ID_array)
4037
{
4138
const exprt &size_expr=
4239
to_array_type(tmp_type).size();
4340

4441
if(size_expr.id()=="infinity")
45-
{
46-
// don't initialize
47-
new_code.make_nil();
48-
return new_code;
49-
}
42+
return {}; // don't initialize
5043

5144
exprt tmp_size=size_expr;
5245
make_constant_index(tmp_size);
@@ -73,9 +66,9 @@ codet cpp_typecheckt::cpp_destructor(
7366
index_exprt index(object, constant);
7467
index.add_source_location()=source_location;
7568

76-
exprt i_code = cpp_destructor(source_location, index);
77-
78-
new_code.move_to_operands(i_code);
69+
auto i_code = cpp_destructor(source_location, index);
70+
if(i_code.has_value())
71+
new_code.move_to_operands(i_code.value());
7972
}
8073
}
8174
else

src/cpp/cpp_typecheck.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -427,9 +427,8 @@ class cpp_typecheckt:public c_typecheck_baset
427427

428428
const struct_typet &this_struct_type();
429429

430-
codet cpp_destructor(
431-
const source_locationt &source_location,
432-
const exprt &object);
430+
optionalt<codet>
431+
cpp_destructor(const source_locationt &source_location, const exprt &object);
433432

434433
// expressions
435434
void explicit_typecast_ambiguity(exprt &expr);

src/cpp/cpp_typecheck_destructor.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,11 +144,11 @@ codet cpp_typecheckt::dtor(const symbolt &symbol)
144144

145145
const bool disabled_access_control = disable_access_control;
146146
disable_access_control = true;
147-
codet dtor_code = cpp_destructor(source_location, member);
147+
auto dtor_code = cpp_destructor(source_location, member);
148148
disable_access_control = disabled_access_control;
149149

150-
if(dtor_code.is_not_nil())
151-
block.move_to_operands(dtor_code);
150+
if(dtor_code.has_value())
151+
block.move_to_operands(dtor_code.value());
152152
}
153153

154154
const irept::subt &bases=symbol.type.find(ID_bases).get_sub();
@@ -169,11 +169,11 @@ codet cpp_typecheckt::dtor(const symbolt &symbol)
169169

170170
const bool disabled_access_control = disable_access_control;
171171
disable_access_control = true;
172-
exprt dtor_code = cpp_destructor(source_location, object);
172+
auto dtor_code = cpp_destructor(source_location, object);
173173
disable_access_control = disabled_access_control;
174174

175-
if(dtor_code.is_not_nil())
176-
block.move_to_operands(dtor_code);
175+
if(dtor_code.has_value())
176+
block.move_to_operands(dtor_code.value());
177177
}
178178

179179
return block;

src/cpp/cpp_typecheck_expr.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1074,15 +1074,16 @@ void cpp_typecheckt::typecheck_expr_delete(exprt &expr)
10741074

10751075
already_typechecked(new_object);
10761076

1077-
codet destructor_code=cpp_destructor(
1078-
expr.source_location(),
1079-
new_object);
1077+
auto destructor_code = cpp_destructor(expr.source_location(), new_object);
10801078

1081-
// this isn't typechecked yet
1082-
if(destructor_code.is_not_nil())
1083-
typecheck_code(destructor_code);
1084-
1085-
expr.set(ID_destructor, destructor_code);
1079+
if(destructor_code.has_value())
1080+
{
1081+
// this isn't typechecked yet
1082+
typecheck_code(destructor_code.value());
1083+
expr.set(ID_destructor, destructor_code.value());
1084+
}
1085+
else
1086+
expr.set(ID_destructor, nil_exprt());
10861087
}
10871088

10881089
void cpp_typecheckt::typecheck_expr_typecast(exprt &)

0 commit comments

Comments
 (0)