Skip to content

Commit 51ccac8

Browse files
authored
Merge pull request #4165 from tautschnig/parametert-api
Use modern API to access parametert's identifier and base name
2 parents c76d69a + 249002d commit 51ccac8

8 files changed

+38
-35
lines changed

src/cpp/cpp_typecheck_compound_type.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -639,7 +639,7 @@ void cpp_typecheckt::typecheck_compound_declarator(
639639
arg_symb.location=func_symb.location;
640640
arg_symb.type=arg.type();
641641

642-
arg.set(ID_C_identifier, arg_symb.name);
642+
arg.set_identifier(arg_symb.name);
643643

644644
// add the parameter to the symbol table
645645
const bool failed=!symbol_table.insert(std::move(arg_symb)).second;
@@ -648,7 +648,7 @@ void cpp_typecheckt::typecheck_compound_declarator(
648648

649649
// do the body of the function
650650
typecast_exprt late_cast(
651-
lookup(args[0].get(ID_C_identifier)).symbol_expr(),
651+
lookup(args[0].get_identifier()).symbol_expr(),
652652
to_code_type(component.type()).parameters()[0].type());
653653

654654
side_effect_expr_function_callt expr_call(
@@ -661,7 +661,7 @@ void cpp_typecheckt::typecheck_compound_declarator(
661661
for(const auto &arg : args)
662662
{
663663
expr_call.arguments().push_back(
664-
lookup(arg.get(ID_C_identifier)).symbol_expr());
664+
lookup(arg.get_identifier()).symbol_expr());
665665
}
666666

667667
if(code_type.return_type().id()!=ID_empty &&

src/cpp/cpp_typecheck_conversions.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -576,13 +576,15 @@ bool cpp_typecheckt::standard_conversion_pointer_to_member(
576576
code_typet code1=to_code_type(expr.type().subtype());
577577
assert(!code1.parameters().empty());
578578
code_typet::parametert this1=code1.parameters()[0];
579-
assert(this1.get(ID_C_base_name)==ID_this);
579+
INVARIANT(
580+
this1.get_base_name() == ID_this, "first parameter should be `this'");
580581
code1.parameters().erase(code1.parameters().begin());
581582

582583
code_typet code2=to_code_type(type.subtype());
583584
assert(!code2.parameters().empty());
584585
code_typet::parametert this2=code2.parameters()[0];
585-
assert(this2.get(ID_C_base_name)==ID_this);
586+
INVARIANT(
587+
this2.get_base_name() == ID_this, "first parameter should be `this'");
586588
code2.parameters().erase(code2.parameters().begin());
587589

588590
if(this2.type().subtype().get_bool(ID_C_constant) &&

src/cpp/cpp_typecheck_expr.cpp

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -706,7 +706,7 @@ void cpp_typecheckt::typecheck_expr_address_of(exprt &expr)
706706
code_typet &code_type=to_code_type(op.type().subtype());
707707

708708
code_typet::parameterst &args=code_type.parameters();
709-
if(args.size() > 0 && args[0].get(ID_C_base_name)==ID_this)
709+
if(!args.empty() && args[0].get_base_name() == ID_this)
710710
{
711711
// it's a pointer to member function
712712
const struct_tag_typet symbol(code_type.get(ID_C_member_name));
@@ -2192,21 +2192,23 @@ void cpp_typecheckt::typecheck_side_effect_function_call(
21922192
// we are willing to add an "address_of"
21932193
// for the sake of operator overloading
21942194

2195-
const irept::subt &arguments=
2196-
expr.function().type().find(ID_arguments).get_sub();
2195+
const code_typet::parameterst &parameters =
2196+
to_code_type(expr.function().type()).parameters();
21972197

2198-
if(arguments.size()>=1 &&
2199-
arguments.front().get(ID_C_base_name)==ID_this &&
2200-
expr.arguments().size()>=1)
2198+
if(
2199+
!parameters.empty() && parameters.front().get_base_name() == ID_this &&
2200+
!expr.arguments().empty())
22012201
{
2202-
const exprt &argument=
2203-
static_cast<const exprt &>(arguments.front());
2202+
const code_typet::parametert &parameter = parameters.front();
22042203

2205-
exprt &operand=expr.op1();
2206-
assert(argument.type().id()==ID_pointer);
2204+
exprt &operand = expr.arguments().front();
2205+
INVARIANT(
2206+
parameter.type().id() == ID_pointer,
2207+
"`this' parameter should be a pointer");
22072208

2208-
if(operand.type().id()!=ID_pointer &&
2209-
operand.type()==argument.type().subtype())
2209+
if(
2210+
operand.type().id() != ID_pointer &&
2211+
operand.type() == parameter.type().subtype())
22102212
{
22112213
address_of_exprt tmp(operand, pointer_type(operand.type()));
22122214
tmp.add_source_location()=operand.source_location();

src/cpp/cpp_typecheck_fargs.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ bool cpp_typecheck_fargst::match(
9797

9898
// "this" is a special case -- we turn the pointer type
9999
// into a reference type to do the type matching
100-
if(it==ops.begin() && parameter.get(ID_C_base_name)==ID_this)
100+
if(it == ops.begin() && parameter.get_base_name() == ID_this)
101101
{
102102
type.set(ID_C_reference, true);
103103
type.set(ID_C_this, true);

src/cpp/cpp_typecheck_function.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ void cpp_typecheckt::convert_function(symbolt &symbol)
127127
code_typet::parametert &this_parameter_expr=parameters.front();
128128
function_scope.this_expr=exprt(ID_symbol, this_parameter_expr.type());
129129
function_scope.this_expr.set(
130-
ID_identifier, this_parameter_expr.get(ID_C_identifier));
130+
ID_identifier, this_parameter_expr.get_identifier());
131131
}
132132
else
133133
function_scope.this_expr.make_nil();

src/cpp/cpp_typecheck_initializer.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -89,18 +89,15 @@ void cpp_typecheckt::convert_initializer(symbolt &symbol)
8989

9090
const code_typet &code_type=to_code_type(symbol.type.subtype());
9191

92-
for(code_typet::parameterst::const_iterator
93-
ait=code_type.parameters().begin();
94-
ait!=code_type.parameters().end();
95-
ait++)
92+
for(const auto &parameter : code_type.parameters())
9693
{
97-
exprt new_object(ID_new_object, ait->type());
94+
exprt new_object(ID_new_object, parameter.type());
9895
new_object.set(ID_C_lvalue, true);
9996

100-
if(ait->get(ID_C_base_name)==ID_this)
97+
if(parameter.get_base_name() == ID_this)
10198
{
10299
fargs.has_object = true;
103-
new_object.type() = ait->type().subtype();
100+
new_object.type() = parameter.type().subtype();
104101
}
105102

106103
fargs.operands.push_back(new_object);

src/cpp/cpp_typecheck_resolve.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2073,8 +2073,9 @@ void cpp_typecheck_resolvet::apply_template_args(
20732073
// check if it is a method
20742074
const code_typet &code_type=to_code_type(new_symbol.type);
20752075

2076-
if(!code_type.parameters().empty() &&
2077-
code_type.parameters()[0].get(ID_C_base_name)==ID_this)
2076+
if(
2077+
!code_type.parameters().empty() &&
2078+
code_type.parameters()[0].get_base_name() == ID_this)
20782079
{
20792080
// do we have an object?
20802081
if(fargs.has_object)
@@ -2128,7 +2129,9 @@ bool cpp_typecheck_resolvet::disambiguate_functions(
21282129
const code_typet::parameterst &parameters=type.parameters();
21292130
const code_typet::parametert &parameter=parameters.front();
21302131

2131-
assert(parameter.get(ID_C_base_name)==ID_this);
2132+
INVARIANT(
2133+
parameter.get_base_name() == ID_this,
2134+
"first parameter should be `this'");
21322135

21332136
if(type.return_type().id() == ID_constructor)
21342137
{

src/cpp/cpp_typecheck_type.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -103,15 +103,14 @@ void cpp_typecheckt::typecheck_type(typet &type)
103103
// there may be parameters if this is a pointer to member function
104104
if(type.subtype().id()==ID_code)
105105
{
106-
irept::subt &parameters=type.subtype().add(ID_parameters).get_sub();
106+
code_typet::parameterst &parameters =
107+
to_code_type(type.subtype()).parameters();
107108

108-
if(parameters.empty() ||
109-
parameters.front().get(ID_C_base_name)!=ID_this)
109+
if(parameters.empty() || parameters.front().get_base_name() != ID_this)
110110
{
111111
// Add 'this' to the parameters
112-
exprt a0(ID_parameter);
113-
a0.set(ID_C_base_name, ID_this);
114-
a0.type()=pointer_type(class_object);
112+
code_typet::parametert a0(pointer_type(class_object));
113+
a0.set_base_name(ID_this);
115114
parameters.insert(parameters.begin(), a0);
116115
}
117116
}

0 commit comments

Comments
 (0)