Skip to content

Commit 13f3d5f

Browse files
committed
use pointer_type() instead of pointer_typet()
1 parent d0c9bd3 commit 13f3d5f

35 files changed

+187
-197
lines changed

src/ansi-c/ansi_c_entry_point.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -327,8 +327,7 @@ bool ansi_c_entry_point(
327327
zero_string.type().set(ID_size, "infinity");
328328
exprt index(ID_index, char_type());
329329
index.copy_to_operands(zero_string, from_integer(0, uint_type()));
330-
exprt address_of("address_of", pointer_typet());
331-
address_of.type().subtype()=char_type();
330+
exprt address_of("address_of", pointer_type(char_type()));
332331
address_of.copy_to_operands(index);
333332
334333
if(argv_symbol.type.subtype()!=address_of.type())

src/ansi-c/c_typecheck_type.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1498,9 +1498,7 @@ void c_typecheck_baset::adjust_function_parameter(typet &type) const
14981498
{
14991499
// see ISO/IEC 9899:1999 page 199 clause 8,
15001500
// may be hidden in typedef
1501-
pointer_typet tmp;
1502-
tmp.subtype()=type;
1503-
type.swap(tmp);
1501+
type=pointer_type(type);
15041502
}
15051503
else if(type.id()==ID_KnR)
15061504
{

src/cpp/cpp_convert_type.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,8 +251,8 @@ void cpp_convert_typet::read_function_type(const typet &type)
251251
// see if it's an array type
252252
if(final_type.id()==ID_array)
253253
{
254-
final_type.id(ID_pointer);
255-
final_type.remove(ID_size);
254+
// turn into pointer type
255+
final_type=pointer_type(final_type.subtype());
256256
}
257257

258258
code_typet::parametert new_parameter(final_type);

src/cpp/cpp_typecheck_compound_type.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Author: Daniel Kroening, kroening@cs.cmu.edu
1616
#include <util/arith_tools.h>
1717
#include <util/simplify_expr.h>
1818
#include <util/std_types.h>
19+
#include <util/c_types.h>
1920

2021
#include <ansi-c/c_qualifiers.h>
2122

@@ -545,7 +546,7 @@ void cpp_typecheckt::typecheck_compound_declarator(
545546

546547
// add a virtual-table pointer
547548
struct_typet::componentt compo;
548-
compo.type()=pointer_typet(symbol_typet(vt_name));
549+
compo.type()=pointer_type(symbol_typet(vt_name));
549550
compo.set_name(id2string(symbol.name) +"::@vtable_pointer");
550551
compo.set(ID_base_name, "@vtable_pointer");
551552
compo.set(
@@ -567,7 +568,7 @@ void cpp_typecheckt::typecheck_compound_declarator(
567568

568569
// add an entry to the virtual table
569570
struct_typet::componentt vt_entry;
570-
vt_entry.type()=pointer_typet(component.type());
571+
vt_entry.type()=pointer_type(component.type());
571572
vt_entry.set_name(id2string(vtit->first)+"::"+virtual_name);
572573
vt_entry.set(ID_base_name, virtual_name);
573574
vt_entry.set(ID_pretty_name, virtual_name);
@@ -1353,7 +1354,7 @@ void cpp_typecheckt::add_this_to_method_type(
13531354
if(has_volatile(method_qualifier))
13541355
subtype.set(ID_C_volatile, true);
13551356

1356-
parameter.type()=pointer_typet(subtype);
1357+
parameter.type()=pointer_type(subtype);
13571358
}
13581359

13591360
void cpp_typecheckt::add_anonymous_members_to_scope(

src/cpp/cpp_typecheck_conversions.cpp

Lines changed: 70 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -73,15 +73,17 @@ bool cpp_typecheckt::standard_conversion_array_to_pointer(
7373
{
7474
assert(expr.type().id()==ID_array);
7575

76-
exprt index(ID_index, expr.type().subtype());
77-
index.copy_to_operands(expr, from_integer(0, index_type()));
76+
index_exprt index(
77+
expr,
78+
from_integer(0, index_type()),
79+
expr.type().subtype());
80+
7881
index.set(ID_C_lvalue, true);
7982

80-
pointer_typet pointer;
81-
pointer.subtype()=expr.type().subtype();
83+
pointer_typet pointer=
84+
pointer_type(expr.type().subtype());
8285

83-
new_expr=exprt(ID_address_of, pointer);
84-
new_expr.move_to_operands(index);
86+
new_expr=address_of_exprt(index, pointer);
8587

8688
return true;
8789
}
@@ -101,12 +103,9 @@ bool cpp_typecheckt::standard_conversion_function_to_pointer(
101103
if(!expr.get_bool(ID_C_lvalue))
102104
return false;
103105

104-
pointer_typet pointer;
105-
pointer.subtype()=func_type;
106+
pointer_typet pointer=pointer_type(func_type);
106107

107-
new_expr=exprt(ID_address_of);
108-
new_expr.copy_to_operands(expr);
109-
new_expr.type()=pointer;
108+
new_expr=address_of_exprt(expr, pointer);
110109

111110
return true;
112111
}
@@ -887,16 +886,13 @@ bool cpp_typecheckt::user_defined_conversion_sequence(
887886

888887
if(subtype_typecast(from_struct, to_struct))
889888
{
890-
exprt address(ID_address_of, pointer_typet());
891-
address.copy_to_operands(expr);
892-
address.type().subtype()=expr.type();
889+
exprt address=address_of_exprt(expr, pointer_type(expr.type()));
893890

894891
// simplify address
895892
if(expr.id()==ID_dereference)
896893
address=expr.op0();
897894

898-
pointer_typet ptr_sub;
899-
ptr_sub.subtype()=type;
895+
pointer_typet ptr_sub=pointer_type(type);
900896
c_qualifierst qual_from;
901897
qual_from.read(expr.type());
902898
qual_from.write(ptr_sub.subtype());
@@ -1019,62 +1015,60 @@ bool cpp_typecheckt::user_defined_conversion_sequence(
10191015
}
10201016
else if(from_struct.is_not_nil() && arg1_struct.is_not_nil())
10211017
{
1022-
// try derived-to-base conversion
1023-
exprt expr_pfrom(ID_address_of, pointer_typet());
1024-
expr_pfrom.type().subtype()=expr.type();
1025-
expr_pfrom.copy_to_operands(expr);
1026-
1027-
pointer_typet pto;
1028-
pto.subtype()=arg1_type;
1029-
1030-
exprt expr_ptmp;
1031-
tmp_rank=0;
1032-
if(standard_conversion_sequence(
1033-
expr_pfrom, pto, expr_ptmp, tmp_rank))
1018+
// try derived-to-base conversion
1019+
exprt expr_pfrom=
1020+
address_of_exprt(expr, pointer_type(expr.type()));
1021+
1022+
pointer_typet pto=pointer_type(arg1_type);
1023+
1024+
exprt expr_ptmp;
1025+
tmp_rank=0;
1026+
if(standard_conversion_sequence(
1027+
expr_pfrom, pto, expr_ptmp, tmp_rank))
1028+
{
1029+
// check if it's ambiguous
1030+
if(found)
1031+
return false;
1032+
found=true;
1033+
1034+
rank+=tmp_rank;
1035+
1036+
// create temporary object
1037+
exprt expr_deref=
1038+
exprt(ID_dereference, expr_ptmp.type().subtype());
1039+
expr_deref.set(ID_C_lvalue, true);
1040+
expr_deref.copy_to_operands(expr_ptmp);
1041+
expr_deref.add_source_location()=expr.source_location();
1042+
1043+
exprt new_object("new_object", type);
1044+
new_object.set(ID_C_lvalue, true);
1045+
new_object.type().set(ID_C_constant, false);
1046+
1047+
exprt func_symb=cpp_symbol_expr(lookup(component.get(ID_name)));
1048+
func_symb.type()=comp_type;
10341049
{
1035-
// check if it's ambiguous
1036-
if(found)
1037-
return false;
1038-
found=true;
1039-
1040-
rank+=tmp_rank;
1041-
1042-
// create temporary object
1043-
exprt expr_deref=
1044-
exprt(ID_dereference, expr_ptmp.type().subtype());
1045-
expr_deref.set(ID_C_lvalue, true);
1046-
expr_deref.copy_to_operands(expr_ptmp);
1047-
expr_deref.add_source_location()=expr.source_location();
1048-
1049-
exprt new_object("new_object", type);
1050-
new_object.set(ID_C_lvalue, true);
1051-
new_object.type().set(ID_C_constant, false);
1052-
1053-
exprt func_symb=cpp_symbol_expr(lookup(component.get(ID_name)));
1054-
func_symb.type()=comp_type;
1055-
{
1056-
exprt tmp("already_typechecked");
1057-
tmp.copy_to_operands(func_symb);
1058-
func_symb.swap(func_symb);
1059-
}
1060-
1061-
side_effect_expr_function_callt ctor_expr;
1062-
ctor_expr.add_source_location()=expr.source_location();
1063-
ctor_expr.function().swap(func_symb);
1064-
ctor_expr.arguments().push_back(expr_deref);
1065-
typecheck_side_effect_function_call(ctor_expr);
1066-
1067-
new_expr.swap(ctor_expr);
1068-
1069-
assert(new_expr.get(ID_statement)==ID_temporary_object);
1070-
1071-
if(to.get_bool(ID_C_constant))
1072-
new_expr.type().set(ID_C_constant, true);
1050+
exprt tmp("already_typechecked");
1051+
tmp.copy_to_operands(func_symb);
1052+
func_symb.swap(func_symb);
10731053
}
1054+
1055+
side_effect_expr_function_callt ctor_expr;
1056+
ctor_expr.add_source_location()=expr.source_location();
1057+
ctor_expr.function().swap(func_symb);
1058+
ctor_expr.arguments().push_back(expr_deref);
1059+
typecheck_side_effect_function_call(ctor_expr);
1060+
1061+
new_expr.swap(ctor_expr);
1062+
1063+
assert(new_expr.get(ID_statement)==ID_temporary_object);
1064+
1065+
if(to.get_bool(ID_C_constant))
1066+
new_expr.type().set(ID_C_constant, true);
10741067
}
10751068
}
1076-
if(found)
1077-
return true;
1069+
}
1070+
if(found)
1071+
return true;
10781072
}
10791073
}
10801074

@@ -1297,9 +1291,8 @@ bool cpp_typecheckt::reference_binding(
12971291
address_of_exprt tmp;
12981292
tmp.add_source_location()=expr.source_location();
12991293
tmp.object()=expr;
1300-
tmp.type()=pointer_typet();
1294+
tmp.type()=pointer_type(tmp.op0().type());
13011295
tmp.type().set(ID_C_reference, true);
1302-
tmp.type().subtype()=tmp.op0().type();
13031296
new_expr.swap(tmp);
13041297
}
13051298

@@ -1427,10 +1420,9 @@ bool cpp_typecheckt::reference_binding(
14271420
if(user_defined_conversion_sequence(arg_expr, type.subtype(), new_expr, rank))
14281421
{
14291422
address_of_exprt tmp;
1430-
tmp.type()=pointer_typet();
1423+
tmp.type()=pointer_type(new_expr.type());
14311424
tmp.object()=new_expr;
14321425
tmp.type().set(ID_C_reference, true);
1433-
tmp.type().subtype()= new_expr.type();
14341426
tmp.add_source_location()=new_expr.source_location();
14351427
new_expr.swap(tmp);
14361428
return true;
@@ -1449,11 +1441,11 @@ bool cpp_typecheckt::reference_binding(
14491441
new_expr.swap(tmp);
14501442
}
14511443

1452-
exprt tmp(ID_address_of, pointer_typet());
1453-
tmp.copy_to_operands(new_expr);
1444+
exprt tmp=
1445+
address_of_exprt(new_expr, pointer_type(new_expr.type()));
14541446
tmp.type().set(ID_C_reference, true);
1455-
tmp.type().subtype()= new_expr.type();
14561447
tmp.add_source_location()=new_expr.source_location();
1448+
14571449
new_expr.swap(tmp);
14581450
return true;
14591451
}
@@ -1880,9 +1872,7 @@ bool cpp_typecheckt::reinterpret_typecast(
18801872

18811873
if(is_reference(type) && e.get_bool(ID_C_lvalue))
18821874
{
1883-
exprt tmp(ID_address_of, pointer_typet());
1884-
tmp.type().subtype()=e.type();
1885-
tmp.copy_to_operands(e);
1875+
exprt tmp=address_of_exprt(e, pointer_type(e.type()));
18861876
tmp.make_typecast(type);
18871877
new_expr.swap(tmp);
18881878
return true;
@@ -1946,10 +1936,8 @@ bool cpp_typecheckt::static_typecast(
19461936
return true;
19471937
}
19481938

1949-
exprt address_of(ID_address_of, pointer_typet());
1950-
address_of.type().subtype()=e.type();
1951-
address_of.copy_to_operands(e);
1952-
make_ptr_typecast(address_of , type);
1939+
exprt address_of=address_of_exprt(e, pointer_type(e.type()));
1940+
make_ptr_typecast(address_of, type);
19531941
new_expr.swap(address_of);
19541942
return true;
19551943
}

src/cpp/cpp_typecheck_expr.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -755,7 +755,7 @@ void cpp_typecheckt::typecheck_expr_address_of(exprt &expr)
755755
const bool is_ref=is_reference(expr.type());
756756
c_typecheck_baset::typecheck_expr_address_of(expr);
757757
if(is_ref)
758-
expr.type()=reference_typet(expr.type().subtype());
758+
expr.type()=reference_type(expr.type().subtype());
759759
}
760760

761761
void cpp_typecheckt::typecheck_expr_throw(exprt &expr)
@@ -808,8 +808,8 @@ void cpp_typecheckt::typecheck_expr_new(exprt &expr)
808808
expr.set(ID_size, to_array_type(expr.type()).size());
809809

810810
// new actually returns a pointer, not an array
811-
pointer_typet ptr_type;
812-
ptr_type.subtype()=expr.type().subtype();
811+
pointer_typet ptr_type=
812+
pointer_type(expr.type().subtype());
813813
expr.type().swap(ptr_type);
814814
}
815815
else
@@ -819,8 +819,7 @@ void cpp_typecheckt::typecheck_expr_new(exprt &expr)
819819

820820
expr.set(ID_statement, ID_cpp_new);
821821

822-
pointer_typet ptr_type;
823-
ptr_type.subtype().swap(expr.type());
822+
pointer_typet ptr_type=pointer_type(expr.type());
824823
expr.type().swap(ptr_type);
825824
}
826825

src/cpp/cpp_typecheck_type.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Author: Daniel Kroening, kroening@cs.cmu.edu
1313

1414
#include <util/source_location.h>
1515
#include <util/simplify_expr.h>
16+
#include <util/c_types.h>
1617

1718
#include <ansi-c/c_qualifiers.h>
1819

@@ -107,8 +108,7 @@ void cpp_typecheckt::typecheck_type(typet &type)
107108
// Add 'this' to the parameters
108109
exprt a0(ID_parameter);
109110
a0.set(ID_C_base_name, ID_this);
110-
a0.type().id(ID_pointer);
111-
a0.type().subtype() = class_object;
111+
a0.type()=pointer_type(class_object);
112112
parameters.insert(parameters.begin(), a0);
113113
}
114114
}

src/cpp/cpp_typecheck_virtual_table.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Author: Daniel Kroening, kroening@cs.cmu.edu
1111

1212
#include "cpp_typecheck.h"
1313

14-
#include <util/std_types.h>
14+
#include <util/c_types.h>
1515
#include <util/std_expr.h>
1616

1717
void cpp_typecheckt::do_virtual_table(const symbolt &symbol)
@@ -32,21 +32,20 @@ void cpp_typecheckt::do_virtual_table(const symbolt &symbol)
3232
const code_typet &code_type=to_code_type(compo.type());
3333
assert(code_type.parameters().size() > 0);
3434

35-
const pointer_typet &pointer_type =
36-
static_cast<const pointer_typet&>(code_type.parameters()[0].type());
35+
const pointer_typet &parameter_pointer_type=
36+
to_pointer_type(code_type.parameters()[0].type());
3737

38-
irep_idt class_id=pointer_type.subtype().get("identifier");
38+
irep_idt class_id=parameter_pointer_type.subtype().get("identifier");
3939

4040
std::map<irep_idt, exprt> &value_map =
4141
vt_value_maps[class_id];
4242

43-
4443
exprt e=symbol_exprt(compo.get_name(), code_type);
4544

4645
if(compo.get_bool("is_pure_virtual"))
4746
{
48-
pointer_typet pointer_type(code_type);
49-
e=null_pointer_exprt(pointer_type);
47+
pointer_typet code_pointer_type=pointer_type(code_type);
48+
e=null_pointer_exprt(code_pointer_type);
5049
value_map[compo.get("virtual_name")]=e;
5150
}
5251
else

src/cpp/parse.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6476,7 +6476,7 @@ bool Parser::rPrimaryExpr(exprt &exp)
64766476

64776477
case TOK_NULLPTR:
64786478
lex.get_token(tk);
6479-
exp=constant_exprt(ID_NULL, pointer_typet(typet(ID_nullptr)));
6479+
exp=constant_exprt(ID_NULL, typet(ID_pointer, typet(ID_nullptr)));
64806480
set_location(exp, tk);
64816481
#ifdef DEBUG
64826482
std::cout << std::string(__indent, ' ') << "Parser::rPrimaryExpr 6\n";

0 commit comments

Comments
 (0)