cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
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
#include <
util/symbol_table.h
>
15
16
#include "
ansi_c_parse_tree.h
"
17
18
void
ansi_c_typecheckt::typecheck
()
19
{
20
start_typecheck_code
();
21
22
for
(
auto
&item :
parse_tree
.items)
23
typecheck_declaration
(item);
24
}
25
26
bool
ansi_c_typecheck
(
27
ansi_c_parse_treet
&ansi_c_parse_tree,
28
symbol_table_baset
&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
catch
(
const
invalid_source_file_exceptiont
&e)
73
{
74
ansi_c_typecheck
.error().source_location = e.get_source_location();
75
ansi_c_typecheck
.error() << e.get_reason() <<
messaget::eom
;
76
}
77
78
return
message_handler.
get_message_count
(
messaget::M_ERROR
)!=errors_before;
79
}
ansi_c_parse_tree.h
ansi_c_typecheck
bool ansi_c_typecheck(ansi_c_parse_treet &ansi_c_parse_tree, symbol_table_baset &symbol_table, const std::string &module, message_handlert &message_handler)
Definition
ansi_c_typecheck.cpp:26
ansi_c_typecheck.h
ANSI-C Language Type Checking.
ansi_c_parse_treet
Definition
ansi_c_parse_tree.h:18
ansi_c_typecheckt
Definition
ansi_c_typecheck.h:31
ansi_c_typecheckt::parse_tree
ansi_c_parse_treet & parse_tree
Definition
ansi_c_typecheck.h:63
ansi_c_typecheckt::typecheck
virtual void typecheck()
Definition
ansi_c_typecheck.cpp:18
c_typecheck_baset::typecheck_declaration
void typecheck_declaration(ansi_c_declarationt &)
Definition
c_typecheck_base.cpp:774
c_typecheck_baset::start_typecheck_code
virtual void start_typecheck_code()
Definition
c_typecheck_code.cpp:24
exprt
Base class for all expressions.
Definition
expr.h:57
invalid_source_file_exceptiont
Thrown when we can't handle something in an input source file.
Definition
exception_utils.h:172
message_handlert
Definition
message.h:27
message_handlert::get_message_count
std::size_t get_message_count(unsigned level) const
Definition
message.h:55
messaget::M_ERROR
@ M_ERROR
Definition
message.h:169
messaget::eom
static eomt eom
Definition
message.h:289
namespacet
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition
namespace.h:91
namespacet::get_symbol_table
const symbol_table_baset & get_symbol_table() const
Return first symbol table registered with the namespace.
Definition
namespace.h:123
symbol_table_baset
The symbol table base class interface.
Definition
symbol_table_base.h:23
symbol_tablet
The symbol table.
Definition
symbol_table.h:14
symbol_table.h
Author: Diffblue Ltd.
ansi-c
ansi_c_typecheck.cpp
Generated by
1.17.0