diff --git a/src/cpp/cpp_typecheck_conversions.cpp b/src/cpp/cpp_typecheck_conversions.cpp index 8699ec1e99f..7549344b19c 100644 --- a/src/cpp/cpp_typecheck_conversions.cpp +++ b/src/cpp/cpp_typecheck_conversions.cpp @@ -480,12 +480,15 @@ bool cpp_typecheckt::standard_conversion_pointer( return true; } - if(type.find("to-member").is_not_nil()) + if(type.find(ID_to_member).is_not_nil()) return false; - if(expr.type().id() != ID_pointer || - expr.type().find("to-member").is_not_nil()) + if( + expr.type().id() != ID_pointer || + expr.type().find(ID_to_member).is_not_nil()) + { return false; + } typet sub_from=follow(expr.type().subtype()); typet sub_to=follow(type.subtype()); @@ -559,13 +562,14 @@ bool cpp_typecheckt::standard_conversion_pointer_to_member( const typet &type, exprt &new_expr) { - if(type.id()!=ID_pointer || - is_reference(type) || - type.find("to-member").is_nil()) + if( + type.id() != ID_pointer || is_reference(type) || + type.find(ID_to_member).is_nil()) + { return false; + } - if(expr.type().id() != ID_pointer || - expr.type().find("to-member").is_nil()) + if(expr.type().id() != ID_pointer || expr.type().find(ID_to_member).is_nil()) return false; if(type.subtype()!=expr.type().subtype()) @@ -609,13 +613,11 @@ bool cpp_typecheckt::standard_conversion_pointer_to_member( return true; } - struct_typet from_struct = - to_struct_type(follow(static_cast - (expr.type().find("to-member")))); + struct_typet from_struct = to_struct_type( + follow(static_cast(expr.type().find(ID_to_member)))); struct_typet to_struct = - to_struct_type(follow(static_cast - (type.find("to-member")))); + to_struct_type(follow(static_cast(type.find(ID_to_member)))); if(subtype_typecast(to_struct, from_struct)) { @@ -1588,11 +1590,11 @@ bool cpp_typecheckt::cast_away_constness( if(is_reference(nt1)) nt1.remove(ID_C_reference); - nt1.remove("to-member"); + nt1.remove(ID_to_member); if(is_reference(nt2)) nt2.remove(ID_C_reference); - nt2.remove("to-member"); + nt2.remove(ID_to_member); // substitute final subtypes std::vector snt1; @@ -1727,7 +1729,7 @@ bool cpp_typecheckt::dynamic_typecast( } else if(type.id()==ID_pointer) { - if(type.find("to-member").is_not_nil()) + if(type.find(ID_to_member).is_not_nil()) return false; if(type.subtype().id()==ID_empty) @@ -1960,8 +1962,7 @@ bool cpp_typecheckt::static_typecast( if(type.id()==ID_pointer && e.type().id()==ID_pointer) { - if(type.find("to-member").is_nil() - && e.type().find("to-member").is_nil()) + if(type.find(ID_to_member).is_nil() && e.type().find(ID_to_member).is_nil()) { typet to=follow(type.subtype()); typet from=follow(e.type().subtype()); @@ -1994,19 +1995,18 @@ bool cpp_typecheckt::static_typecast( return false; } - else if(type.find("to-member").is_not_nil() && - e.type().find("to-member").is_not_nil()) + else if( + type.find(ID_to_member).is_not_nil() && + e.type().find(ID_to_member).is_not_nil()) { if(type.subtype()!=e.type().subtype()) return false; - struct_typet from_struct= - to_struct_type( - follow(static_cast(e.type().find("to-member")))); + struct_typet from_struct = to_struct_type( + follow(static_cast(e.type().find(ID_to_member)))); - struct_typet to_struct= - to_struct_type( - follow(static_cast(type.find("to-member")))); + struct_typet to_struct = to_struct_type( + follow(static_cast(type.find(ID_to_member)))); if(subtype_typecast(from_struct, to_struct)) { @@ -2016,17 +2016,17 @@ bool cpp_typecheckt::static_typecast( } } else if( - type.find("to-member").is_nil() && - e.type().find("to-member").is_not_nil()) + type.find(ID_to_member).is_nil() && + e.type().find(ID_to_member).is_not_nil()) { if(type.subtype() != e.type().subtype()) return false; struct_typet from_struct = to_struct_type( - follow(static_cast(e.type().find("to-member")))); + follow(static_cast(e.type().find(ID_to_member)))); new_expr = e; - new_expr.type().add("to-member") = from_struct; + new_expr.type().add(ID_to_member) = from_struct; return true; } diff --git a/src/cpp/cpp_typecheck_expr.cpp b/src/cpp/cpp_typecheck_expr.cpp index 0e0985a3624..5201e52f8e2 100644 --- a/src/cpp/cpp_typecheck_expr.cpp +++ b/src/cpp/cpp_typecheck_expr.cpp @@ -53,7 +53,7 @@ void cpp_typecheckt::typecheck_expr_main(exprt &expr) typecheck_expr_cpp_name(expr, cpp_typecheck_fargst()); else if(expr.id()=="cpp-this") typecheck_expr_this(expr); - else if(expr.id()=="pointer-to-member") + else if(expr.id() == ID_pointer_to_member) convert_pmop(expr); else if(expr.id() == ID_new_object) { @@ -718,7 +718,7 @@ void cpp_typecheckt::typecheck_expr_address_of(exprt &expr) { // it's a pointer to member function const struct_tag_typet symbol(code_type.get(ID_C_member_name)); - expr.op0().type().add("to-member")=symbol; + expr.op0().type().add(ID_to_member) = symbol; if(code_type.get_bool(ID_C_is_virtual)) { @@ -733,7 +733,7 @@ void cpp_typecheckt::typecheck_expr_address_of(exprt &expr) expr.op0().id() == ID_ptrmember && expr.op0().op0().id() == "cpp-this") { expr.type() = pointer_type(expr.op0().type()); - expr.type().add("to-member") = expr.op0().op0().type().subtype(); + expr.type().add(ID_to_member) = expr.op0().op0().type().subtype(); return; } @@ -1999,7 +1999,7 @@ void cpp_typecheckt::typecheck_side_effect_function_call( if(expr.function().type().id()==ID_pointer) { - if(expr.function().type().find("to-member").is_not_nil()) + if(expr.function().type().find(ID_to_member).is_not_nil()) { const exprt &bound = static_cast(expr.function().type().find(ID_C_bound)); @@ -2592,8 +2592,7 @@ void cpp_typecheckt::typecheck_expr_dereference(exprt &expr) exprt &op=expr.op0(); const typet op_type=follow(op.type()); - if(op_type.id()==ID_pointer && - op_type.find("to-member").is_not_nil()) + if(op_type.id() == ID_pointer && op_type.find(ID_to_member).is_not_nil()) { error().source_location=expr.find_source_location(); error() << "pointer-to-member must use " @@ -2606,11 +2605,12 @@ void cpp_typecheckt::typecheck_expr_dereference(exprt &expr) void cpp_typecheckt::convert_pmop(exprt &expr) { - assert(expr.id()=="pointer-to-member"); - assert(expr.operands().size() == 2); + PRECONDITION(expr.id() == ID_pointer_to_member); + PRECONDITION(expr.operands().size() == 2); - if(expr.op1().type().id()!=ID_pointer - || expr.op1().type().find("to-member").is_nil()) + if( + expr.op1().type().id() != ID_pointer || + expr.op1().type().find(ID_to_member).is_nil()) { error().source_location=expr.source_location(); error() << "pointer-to-member expected" << eom; @@ -2620,7 +2620,7 @@ void cpp_typecheckt::convert_pmop(exprt &expr) typet t0=expr.op0().type().id()==ID_pointer ? expr.op0().type().subtype(): expr.op0().type(); - typet t1((const typet&)expr.op1().type().find("to-member")); + typet t1((const typet &)expr.op1().type().find(ID_to_member)); t0=follow(t0); t1=follow(t1); diff --git a/src/cpp/cpp_typecheck_initializer.cpp b/src/cpp/cpp_typecheck_initializer.cpp index eb9651b0926..ccc84862c10 100644 --- a/src/cpp/cpp_typecheck_initializer.cpp +++ b/src/cpp/cpp_typecheck_initializer.cpp @@ -123,7 +123,7 @@ void cpp_typecheckt::convert_initializer(symbolt &symbol) address_of_exprt( lookup(resolved_expr.get(ID_component_name)).symbol_expr()); - symbol.value.type().add("to-member") = resolved_expr.op0().type(); + symbol.value.type().add(ID_to_member) = resolved_expr.op0().type(); } else UNREACHABLE; @@ -142,8 +142,8 @@ void cpp_typecheckt::convert_initializer(symbolt &symbol) typecheck_expr(symbol.value); - if(symbol.value.type().find("to-member").is_not_nil()) - symbol.type.add("to-member") = symbol.value.type().find("to-member"); + if(symbol.value.type().find(ID_to_member).is_not_nil()) + symbol.type.add(ID_to_member) = symbol.value.type().find(ID_to_member); if(symbol.value.id()==ID_initializer_list || symbol.value.id()==ID_string_constant) diff --git a/src/cpp/cpp_typecheck_type.cpp b/src/cpp/cpp_typecheck_type.cpp index 84f5fda2fd1..a3a3aa3b265 100644 --- a/src/cpp/cpp_typecheck_type.cpp +++ b/src/cpp/cpp_typecheck_type.cpp @@ -85,12 +85,12 @@ void cpp_typecheckt::typecheck_type(typet &type) typecheck_type(type.subtype()); // Check if it is a pointer-to-member - if(type.find("to-member").is_not_nil()) + if(type.find(ID_to_member).is_not_nil()) { // these can point either to data members or member functions // of a class - typet &class_object=static_cast(type.add("to-member")); + typet &class_object = static_cast(type.add(ID_to_member)); if(class_object.id()==ID_cpp_name) { diff --git a/src/cpp/expr2cpp.cpp b/src/cpp/expr2cpp.cpp index c8649f56ba2..60b0e1fe423 100644 --- a/src/cpp/expr2cpp.cpp +++ b/src/cpp/expr2cpp.cpp @@ -259,12 +259,11 @@ std::string expr2cppt::convert_rec( { return "std::nullptr_t"; } - else if(src.id()==ID_pointer && - src.find("to-member").is_not_nil()) + else if(src.id() == ID_pointer && src.find(ID_to_member).is_not_nil()) { typet tmp=src; typet member; - member.swap(tmp.add("to-member")); + member.swap(tmp.add(ID_to_member)); std::string dest="("+convert_rec(member, c_qualifierst(), "")+":: *)"; diff --git a/src/cpp/parse.cpp b/src/cpp/parse.cpp index 4f816522c01..8a9f55f9341 100644 --- a/src/cpp/parse.cpp +++ b/src/cpp/parse.cpp @@ -3771,7 +3771,7 @@ bool Parser::rPtrToMember(irept &ptr_to_mem) #endif typet ptm(ID_frontend_pointer); // width gets set during conversion - irept &name = ptm.add("to-member"); + irept &name = ptm.add(ID_to_member); name=cpp_namet(); irept::subt &components=name.get_sub(); @@ -5377,7 +5377,7 @@ bool Parser::rPmExpr(exprt &exp) exprt left; left.swap(exp); - exp=exprt("pointer-to-member"); + exp = exprt(ID_pointer_to_member); exp.move_to_operands(left, right); set_location(exp, tk); } diff --git a/src/util/irep_ids.def b/src/util/irep_ids.def index 692b64fbf4b..9eea3d33f2e 100644 --- a/src/util/irep_ids.def +++ b/src/util/irep_ids.def @@ -720,6 +720,8 @@ IREP_ID_ONE(template_decls) IREP_ID_ONE(throw_decl) IREP_ID_ONE(typeid) IREP_ID_TWO(C_quoted, #quoted) +IREP_ID_ONE(to_member) +IREP_ID_ONE(pointer_to_member) // Projects depending on this code base that wish to extend the list of // available ids should provide a file local_irep_ids.def in their source tree