cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
cpp_id.h
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module: C++ Language Type Checking
4
5
Author: Daniel Kroening, kroening@cs.cmu.edu
6
7
\*******************************************************************/
8
11
12
#ifndef CPROVER_CPP_CPP_ID_H
13
#define CPROVER_CPP_CPP_ID_H
14
15
#include <map>
16
#include <string>
17
#include <iosfwd>
18
19
#include <
util/expr.h
>
20
#include <
util/invariant.h
>
21
22
class
cpp_idt
23
{
24
public
:
25
cpp_idt
();
26
27
enum class
id_classt
28
{
29
UNKNOWN
,
30
SYMBOL
,
31
TYPEDEF
,
32
CLASS
,
33
ENUM
,
34
TEMPLATE
,
35
TEMPLATE_PARAMETER
,
36
NAMESPACE
,
37
BLOCK_SCOPE
,
38
TEMPLATE_SCOPE
,
39
ROOT_SCOPE
,
40
};
41
42
bool
is_member
,
is_method
,
is_static_member
,
43
is_scope
,
is_constructor
;
44
45
id_classt
id_class
;
46
47
bool
is_class
()
const
48
{
49
return
id_class
==
id_classt::CLASS
;
50
}
51
52
bool
is_enum
()
const
53
{
54
return
id_class
==
id_classt::ENUM
;
55
}
56
57
bool
is_namespace
()
const
58
{
59
return
id_class
==
id_classt::NAMESPACE
;
60
}
61
62
bool
is_typedef
()
const
63
{
64
return
id_class
==
id_classt::TYPEDEF
;
65
}
66
67
bool
is_template_scope
()
const
68
{
69
return
id_class
==
id_classt::TEMPLATE_SCOPE
;
70
}
71
72
irep_idt
identifier
,
base_name
;
73
74
// if it is a member or method, what class is it in?
75
irep_idt
class_identifier
;
76
exprt
this_expr
;
77
78
// scope data
79
std::string
prefix
,
suffix
;
80
unsigned
compound_counter
;
81
82
cpp_idt
&
get_parent
()
const
83
{
84
PRECONDITION
(
parent
!=
nullptr
);
85
return
*
parent
;
86
}
87
88
void
set_parent
(
cpp_idt
&_parent)
89
{
90
PRECONDITION
(_parent.
is_scope
);
91
parent
=&_parent;
92
}
93
94
void
clear
()
95
{
96
*
this
=
cpp_idt
();
97
}
98
99
void
print
(std::ostream &out,
unsigned
indent=0)
const
;
100
void
print_fields
(std::ostream &out,
unsigned
indent=0)
const
;
101
102
protected
:
103
typedef
std::multimap<irep_idt, cpp_idt>
cpp_id_mapt
;
104
cpp_id_mapt
sub
;
105
106
// These are used for base classes and 'using' clauses.
107
typedef
std::vector<cpp_idt *>
scope_listt
;
108
scope_listt
using_scopes
,
secondary_scopes
;
109
cpp_idt
*
parent
;
110
};
111
112
std::ostream &
operator<<
(std::ostream &out,
const
cpp_idt
&cpp_id);
113
std::ostream &
operator<<
(std::ostream &out,
const
cpp_idt::id_classt
&
id_class
);
114
115
#endif
// CPROVER_CPP_CPP_ID_H
cpp_idt
Definition
cpp_id.h:23
cpp_idt::cpp_id_mapt
std::multimap< irep_idt, cpp_idt > cpp_id_mapt
Definition
cpp_id.h:103
cpp_idt::identifier
irep_idt identifier
Definition
cpp_id.h:72
cpp_idt::is_member
bool is_member
Definition
cpp_id.h:42
cpp_idt::this_expr
exprt this_expr
Definition
cpp_id.h:76
cpp_idt::clear
void clear()
Definition
cpp_id.h:94
cpp_idt::using_scopes
scope_listt using_scopes
Definition
cpp_id.h:108
cpp_idt::prefix
std::string prefix
Definition
cpp_id.h:79
cpp_idt::is_namespace
bool is_namespace() const
Definition
cpp_id.h:57
cpp_idt::get_parent
cpp_idt & get_parent() const
Definition
cpp_id.h:82
cpp_idt::is_scope
bool is_scope
Definition
cpp_id.h:43
cpp_idt::id_classt
id_classt
Definition
cpp_id.h:28
cpp_idt::id_classt::BLOCK_SCOPE
@ BLOCK_SCOPE
Definition
cpp_id.h:37
cpp_idt::id_classt::TEMPLATE_PARAMETER
@ TEMPLATE_PARAMETER
Definition
cpp_id.h:35
cpp_idt::id_classt::UNKNOWN
@ UNKNOWN
Definition
cpp_id.h:29
cpp_idt::id_classt::NAMESPACE
@ NAMESPACE
Definition
cpp_id.h:36
cpp_idt::id_classt::ENUM
@ ENUM
Definition
cpp_id.h:33
cpp_idt::id_classt::SYMBOL
@ SYMBOL
Definition
cpp_id.h:30
cpp_idt::id_classt::TEMPLATE
@ TEMPLATE
Definition
cpp_id.h:34
cpp_idt::id_classt::TYPEDEF
@ TYPEDEF
Definition
cpp_id.h:31
cpp_idt::id_classt::CLASS
@ CLASS
Definition
cpp_id.h:32
cpp_idt::id_classt::ROOT_SCOPE
@ ROOT_SCOPE
Definition
cpp_id.h:39
cpp_idt::id_classt::TEMPLATE_SCOPE
@ TEMPLATE_SCOPE
Definition
cpp_id.h:38
cpp_idt::is_typedef
bool is_typedef() const
Definition
cpp_id.h:62
cpp_idt::sub
cpp_id_mapt sub
Definition
cpp_id.h:104
cpp_idt::id_class
id_classt id_class
Definition
cpp_id.h:45
cpp_idt::print
void print(std::ostream &out, unsigned indent=0) const
Definition
cpp_id.cpp:31
cpp_idt::is_constructor
bool is_constructor
Definition
cpp_id.h:43
cpp_idt::is_method
bool is_method
Definition
cpp_id.h:42
cpp_idt::is_template_scope
bool is_template_scope() const
Definition
cpp_id.h:67
cpp_idt::cpp_idt
cpp_idt()
Definition
cpp_id.cpp:18
cpp_idt::is_static_member
bool is_static_member
Definition
cpp_id.h:42
cpp_idt::is_class
bool is_class() const
Definition
cpp_id.h:47
cpp_idt::print_fields
void print_fields(std::ostream &out, unsigned indent=0) const
Definition
cpp_id.cpp:44
cpp_idt::set_parent
void set_parent(cpp_idt &_parent)
Definition
cpp_id.h:88
cpp_idt::secondary_scopes
scope_listt secondary_scopes
Definition
cpp_id.h:108
cpp_idt::is_enum
bool is_enum() const
Definition
cpp_id.h:52
cpp_idt::scope_listt
std::vector< cpp_idt * > scope_listt
Definition
cpp_id.h:107
cpp_idt::compound_counter
unsigned compound_counter
Definition
cpp_id.h:80
cpp_idt::class_identifier
irep_idt class_identifier
Definition
cpp_id.h:75
cpp_idt::base_name
irep_idt base_name
Definition
cpp_id.h:72
cpp_idt::suffix
std::string suffix
Definition
cpp_id.h:79
cpp_idt::parent
cpp_idt * parent
Definition
cpp_id.h:109
exprt
Base class for all expressions.
Definition
expr.h:57
operator<<
std::ostream & operator<<(std::ostream &out, const cpp_idt &cpp_id)
Definition
cpp_id.cpp:92
expr.h
idt::id_class
@ id_class
Definition
irep_ids.cpp:181
invariant.h
PRECONDITION
#define PRECONDITION(CONDITION)
Definition
invariant.h:463
irep_idt
dstringt irep_idt
Definition
verification_result.h:16
cpp
cpp_id.h
Generated by
1.17.0