Skip to content

Commit c9bbc4c

Browse files
committed
Introduce ID_to_member to replace "to-member" string literals
This is more efficient and avoids bugs caused by typos.
1 parent 2be3344 commit c9bbc4c

File tree

7 files changed

+47
-47
lines changed

7 files changed

+47
-47
lines changed

src/cpp/cpp_typecheck_conversions.cpp

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -480,12 +480,15 @@ bool cpp_typecheckt::standard_conversion_pointer(
480480
return true;
481481
}
482482

483-
if(type.find("to-member").is_not_nil())
483+
if(type.find(ID_to_member).is_not_nil())
484484
return false;
485485

486-
if(expr.type().id() != ID_pointer ||
487-
expr.type().find("to-member").is_not_nil())
486+
if(
487+
expr.type().id() != ID_pointer ||
488+
expr.type().find(ID_to_member).is_not_nil())
489+
{
488490
return false;
491+
}
489492

490493
typet sub_from=follow(expr.type().subtype());
491494
typet sub_to=follow(type.subtype());
@@ -559,13 +562,14 @@ bool cpp_typecheckt::standard_conversion_pointer_to_member(
559562
const typet &type,
560563
exprt &new_expr)
561564
{
562-
if(type.id()!=ID_pointer ||
563-
is_reference(type) ||
564-
type.find("to-member").is_nil())
565+
if(
566+
type.id() != ID_pointer || is_reference(type) ||
567+
type.find(ID_to_member).is_nil())
568+
{
565569
return false;
570+
}
566571

567-
if(expr.type().id() != ID_pointer ||
568-
expr.type().find("to-member").is_nil())
572+
if(expr.type().id() != ID_pointer || expr.type().find(ID_to_member).is_nil())
569573
return false;
570574

571575
if(type.subtype()!=expr.type().subtype())
@@ -609,13 +613,11 @@ bool cpp_typecheckt::standard_conversion_pointer_to_member(
609613
return true;
610614
}
611615

612-
struct_typet from_struct =
613-
to_struct_type(follow(static_cast<const typet &>
614-
(expr.type().find("to-member"))));
616+
struct_typet from_struct = to_struct_type(
617+
follow(static_cast<const typet &>(expr.type().find(ID_to_member))));
615618

616619
struct_typet to_struct =
617-
to_struct_type(follow(static_cast<const typet &>
618-
(type.find("to-member"))));
620+
to_struct_type(follow(static_cast<const typet &>(type.find(ID_to_member))));
619621

620622
if(subtype_typecast(to_struct, from_struct))
621623
{
@@ -1588,11 +1590,11 @@ bool cpp_typecheckt::cast_away_constness(
15881590

15891591
if(is_reference(nt1))
15901592
nt1.remove(ID_C_reference);
1591-
nt1.remove("to-member");
1593+
nt1.remove(ID_to_member);
15921594

15931595
if(is_reference(nt2))
15941596
nt2.remove(ID_C_reference);
1595-
nt2.remove("to-member");
1597+
nt2.remove(ID_to_member);
15961598

15971599
// substitute final subtypes
15981600
std::vector<typet> snt1;
@@ -1727,7 +1729,7 @@ bool cpp_typecheckt::dynamic_typecast(
17271729
}
17281730
else if(type.id()==ID_pointer)
17291731
{
1730-
if(type.find("to-member").is_not_nil())
1732+
if(type.find(ID_to_member).is_not_nil())
17311733
return false;
17321734

17331735
if(type.subtype().id()==ID_empty)
@@ -1960,8 +1962,7 @@ bool cpp_typecheckt::static_typecast(
19601962

19611963
if(type.id()==ID_pointer && e.type().id()==ID_pointer)
19621964
{
1963-
if(type.find("to-member").is_nil()
1964-
&& e.type().find("to-member").is_nil())
1965+
if(type.find(ID_to_member).is_nil() && e.type().find(ID_to_member).is_nil())
19651966
{
19661967
typet to=follow(type.subtype());
19671968
typet from=follow(e.type().subtype());
@@ -1994,19 +1995,18 @@ bool cpp_typecheckt::static_typecast(
19941995

19951996
return false;
19961997
}
1997-
else if(type.find("to-member").is_not_nil() &&
1998-
e.type().find("to-member").is_not_nil())
1998+
else if(
1999+
type.find(ID_to_member).is_not_nil() &&
2000+
e.type().find(ID_to_member).is_not_nil())
19992001
{
20002002
if(type.subtype()!=e.type().subtype())
20012003
return false;
20022004

2003-
struct_typet from_struct=
2004-
to_struct_type(
2005-
follow(static_cast<const typet&>(e.type().find("to-member"))));
2005+
struct_typet from_struct = to_struct_type(
2006+
follow(static_cast<const typet &>(e.type().find(ID_to_member))));
20062007

2007-
struct_typet to_struct=
2008-
to_struct_type(
2009-
follow(static_cast<const typet&>(type.find("to-member"))));
2008+
struct_typet to_struct = to_struct_type(
2009+
follow(static_cast<const typet &>(type.find(ID_to_member))));
20102010

20112011
if(subtype_typecast(from_struct, to_struct))
20122012
{
@@ -2016,17 +2016,17 @@ bool cpp_typecheckt::static_typecast(
20162016
}
20172017
}
20182018
else if(
2019-
type.find("to-member").is_nil() &&
2020-
e.type().find("to-member").is_not_nil())
2019+
type.find(ID_to_member).is_nil() &&
2020+
e.type().find(ID_to_member).is_not_nil())
20212021
{
20222022
if(type.subtype() != e.type().subtype())
20232023
return false;
20242024

20252025
struct_typet from_struct = to_struct_type(
2026-
follow(static_cast<const typet &>(e.type().find("to-member"))));
2026+
follow(static_cast<const typet &>(e.type().find(ID_to_member))));
20272027

20282028
new_expr = e;
2029-
new_expr.type().add("to-member") = from_struct;
2029+
new_expr.type().add(ID_to_member) = from_struct;
20302030

20312031
return true;
20322032
}

src/cpp/cpp_typecheck_expr.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -718,7 +718,7 @@ void cpp_typecheckt::typecheck_expr_address_of(exprt &expr)
718718
{
719719
// it's a pointer to member function
720720
const struct_tag_typet symbol(code_type.get(ID_C_member_name));
721-
expr.op0().type().add("to-member")=symbol;
721+
expr.op0().type().add(ID_to_member) = symbol;
722722

723723
if(code_type.get_bool(ID_C_is_virtual))
724724
{
@@ -733,7 +733,7 @@ void cpp_typecheckt::typecheck_expr_address_of(exprt &expr)
733733
expr.op0().id() == ID_ptrmember && expr.op0().op0().id() == "cpp-this")
734734
{
735735
expr.type() = pointer_type(expr.op0().type());
736-
expr.type().add("to-member") = expr.op0().op0().type().subtype();
736+
expr.type().add(ID_to_member) = expr.op0().op0().type().subtype();
737737
return;
738738
}
739739

@@ -1999,7 +1999,7 @@ void cpp_typecheckt::typecheck_side_effect_function_call(
19991999

20002000
if(expr.function().type().id()==ID_pointer)
20012001
{
2002-
if(expr.function().type().find("to-member").is_not_nil())
2002+
if(expr.function().type().find(ID_to_member).is_not_nil())
20032003
{
20042004
const exprt &bound =
20052005
static_cast<const exprt &>(expr.function().type().find(ID_C_bound));
@@ -2592,8 +2592,7 @@ void cpp_typecheckt::typecheck_expr_dereference(exprt &expr)
25922592
exprt &op=expr.op0();
25932593
const typet op_type=follow(op.type());
25942594

2595-
if(op_type.id()==ID_pointer &&
2596-
op_type.find("to-member").is_not_nil())
2595+
if(op_type.id() == ID_pointer && op_type.find(ID_to_member).is_not_nil())
25972596
{
25982597
error().source_location=expr.find_source_location();
25992598
error() << "pointer-to-member must use "
@@ -2609,8 +2608,9 @@ void cpp_typecheckt::convert_pmop(exprt &expr)
26092608
assert(expr.id()=="pointer-to-member");
26102609
assert(expr.operands().size() == 2);
26112610

2612-
if(expr.op1().type().id()!=ID_pointer
2613-
|| expr.op1().type().find("to-member").is_nil())
2611+
if(
2612+
expr.op1().type().id() != ID_pointer ||
2613+
expr.op1().type().find(ID_to_member).is_nil())
26142614
{
26152615
error().source_location=expr.source_location();
26162616
error() << "pointer-to-member expected" << eom;
@@ -2620,7 +2620,7 @@ void cpp_typecheckt::convert_pmop(exprt &expr)
26202620
typet t0=expr.op0().type().id()==ID_pointer ?
26212621
expr.op0().type().subtype(): expr.op0().type();
26222622

2623-
typet t1((const typet&)expr.op1().type().find("to-member"));
2623+
typet t1((const typet &)expr.op1().type().find(ID_to_member));
26242624

26252625
t0=follow(t0);
26262626
t1=follow(t1);

src/cpp/cpp_typecheck_initializer.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ void cpp_typecheckt::convert_initializer(symbolt &symbol)
123123
address_of_exprt(
124124
lookup(resolved_expr.get(ID_component_name)).symbol_expr());
125125

126-
symbol.value.type().add("to-member") = resolved_expr.op0().type();
126+
symbol.value.type().add(ID_to_member) = resolved_expr.op0().type();
127127
}
128128
else
129129
UNREACHABLE;
@@ -142,8 +142,8 @@ void cpp_typecheckt::convert_initializer(symbolt &symbol)
142142

143143
typecheck_expr(symbol.value);
144144

145-
if(symbol.value.type().find("to-member").is_not_nil())
146-
symbol.type.add("to-member") = symbol.value.type().find("to-member");
145+
if(symbol.value.type().find(ID_to_member).is_not_nil())
146+
symbol.type.add(ID_to_member) = symbol.value.type().find(ID_to_member);
147147

148148
if(symbol.value.id()==ID_initializer_list ||
149149
symbol.value.id()==ID_string_constant)

src/cpp/cpp_typecheck_type.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,12 @@ void cpp_typecheckt::typecheck_type(typet &type)
8585
typecheck_type(type.subtype());
8686

8787
// Check if it is a pointer-to-member
88-
if(type.find("to-member").is_not_nil())
88+
if(type.find(ID_to_member).is_not_nil())
8989
{
9090
// these can point either to data members or member functions
9191
// of a class
9292

93-
typet &class_object=static_cast<typet &>(type.add("to-member"));
93+
typet &class_object = static_cast<typet &>(type.add(ID_to_member));
9494

9595
if(class_object.id()==ID_cpp_name)
9696
{

src/cpp/expr2cpp.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -259,12 +259,11 @@ std::string expr2cppt::convert_rec(
259259
{
260260
return "std::nullptr_t";
261261
}
262-
else if(src.id()==ID_pointer &&
263-
src.find("to-member").is_not_nil())
262+
else if(src.id() == ID_pointer && src.find(ID_to_member).is_not_nil())
264263
{
265264
typet tmp=src;
266265
typet member;
267-
member.swap(tmp.add("to-member"));
266+
member.swap(tmp.add(ID_to_member));
268267

269268
std::string dest="("+convert_rec(member, c_qualifierst(), "")+":: *)";
270269

src/cpp/parse.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3771,7 +3771,7 @@ bool Parser::rPtrToMember(irept &ptr_to_mem)
37713771
#endif
37723772

37733773
typet ptm(ID_frontend_pointer); // width gets set during conversion
3774-
irept &name = ptm.add("to-member");
3774+
irept &name = ptm.add(ID_to_member);
37753775
name=cpp_namet();
37763776
irept::subt &components=name.get_sub();
37773777

src/util/irep_ids.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -720,6 +720,7 @@ IREP_ID_ONE(template_decls)
720720
IREP_ID_ONE(throw_decl)
721721
IREP_ID_ONE(typeid)
722722
IREP_ID_TWO(C_quoted, #quoted)
723+
IREP_ID_ONE(to_member)
723724

724725
// Projects depending on this code base that wish to extend the list of
725726
// available ids should provide a file local_irep_ids.def in their source tree

0 commit comments

Comments
 (0)