cprover
ansi_c_typecheck.cpp
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module: ANSI-C Language Type Checking
4
5
Author: Daniel Kroening, kroening@kroening.com
6
7
\*******************************************************************/
8
11
12
#include "
ansi_c_typecheck.h
"
13
14
void
ansi_c_typecheckt::typecheck
()
15
{
16
start_typecheck_code
();
17
for
(ansi_c_parse_treet::itemst::iterator
18
it=
parse_tree
.
items
.begin();
19
it!=
parse_tree
.
items
.end();
20
it++)
21
{
22
typecheck_declaration
(*it);
23
}
24
}
25
26
bool
ansi_c_typecheck
(
27
ansi_c_parse_treet
&ansi_c_parse_tree,
28
symbol_tablet
&symbol_table,
29
const
std::string &module,
30
message_handlert
&message_handler)
31
{
32
ansi_c_typecheckt
ansi_c_typecheck
(
33
ansi_c_parse_tree, symbol_table, module, message_handler);
34
return
ansi_c_typecheck
.typecheck_main();
35
}
36
37
bool
ansi_c_typecheck
(
38
exprt
&expr,
39
message_handlert
&message_handler,
40
const
namespacet
&ns)
41
{
42
const
unsigned
errors_before=
43
message_handler.
get_message_count
(
messaget::M_ERROR
);
44
45
symbol_tablet
symbol_table;
46
ansi_c_parse_treet
ansi_c_parse_tree;
47
48
ansi_c_typecheckt
ansi_c_typecheck
(
49
ansi_c_parse_tree, symbol_table,
50
ns.
get_symbol_table
(),
""
, message_handler);
51
52
try
53
{
54
ansi_c_typecheck
.typecheck_expr(expr);
55
}
56
57
catch
(
int
)
58
{
59
ansi_c_typecheck
.error();
60
}
61
62
catch
(
const
char
*e)
63
{
64
ansi_c_typecheck
.error() << e <<
messaget::eom
;
65
}
66
67
catch
(
const
std::string &e)
68
{
69
ansi_c_typecheck
.error() << e <<
messaget::eom
;
70
}
71
72
return
message_handler.
get_message_count
(
messaget::M_ERROR
)!=errors_before;
73
}
symbol_tablet
The symbol table.
Definition:
symbol_table.h:19
ansi_c_typecheck.h
c_typecheck_baset::typecheck_declaration
void typecheck_declaration(ansi_c_declarationt &)
Definition:
c_typecheck_base.cpp:654
ansi_c_typecheckt::parse_tree
ansi_c_parse_treet & parse_tree
Definition:
ansi_c_typecheck.h:59
ansi_c_parse_treet::items
itemst items
Definition:
ansi_c_parse_tree.h:22
exprt
Base class for all expressions.
Definition:
expr.h:54
messaget::eom
static eomt eom
Definition:
message.h:284
namespacet
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition:
namespace.h:93
ansi_c_typecheckt::typecheck
virtual void typecheck()
Definition:
ansi_c_typecheck.cpp:14
messaget::M_ERROR
@ M_ERROR
Definition:
message.h:160
ansi_c_parse_treet
Definition:
ansi_c_parse_tree.h:17
message_handlert
Definition:
message.h:24
namespacet::get_symbol_table
const symbol_table_baset & get_symbol_table() const
Return first symbol table registered with the namespace.
Definition:
namespace.h:126
ansi_c_typecheck
bool ansi_c_typecheck(ansi_c_parse_treet &ansi_c_parse_tree, symbol_tablet &symbol_table, const std::string &module, message_handlert &message_handler)
Definition:
ansi_c_typecheck.cpp:26
c_typecheck_baset::start_typecheck_code
virtual void start_typecheck_code()
Definition:
c_typecheck_code.cpp:19
message_handlert::get_message_count
std::size_t get_message_count(unsigned level) const
Definition:
message.h:51
ansi_c_typecheckt
Definition:
ansi_c_typecheck.h:29
ansi-c
ansi_c_typecheck.cpp
Generated by
1.8.17