CBMC
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,
36  NAMESPACE,
39  ROOT_SCOPE,
40  };
41 
44 
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  {
60  }
61 
62  bool is_typedef() const
63  {
65  }
66 
67  bool is_template_scope() const
68  {
70  }
71 
73 
74  // if it is a member or method, what class is it in?
77 
78  // scope data
79  std::string prefix, suffix;
80  unsigned compound_counter;
81 
83  {
84  PRECONDITION(parent!=nullptr);
85  return *parent;
86  }
87 
88  void set_parent(cpp_idt &_parent)
89  {
90  assert(_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;
105 
106  // These are used for base classes and 'using' clauses.
107  typedef std::vector<cpp_idt *> scope_listt;
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
dstringt
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition: dstring.h:36
cpp_idt::class_identifier
irep_idt class_identifier
Definition: cpp_id.h:75
cpp_idt::is_class
bool is_class() const
Definition: cpp_id.h:47
cpp_idt::is_typedef
bool is_typedef() const
Definition: cpp_id.h:62
cpp_idt::id_classt::CLASS
@ CLASS
cpp_idt::id_classt::UNKNOWN
@ UNKNOWN
cpp_idt::cpp_id_mapt
std::multimap< irep_idt, cpp_idt > cpp_id_mapt
Definition: cpp_id.h:103
cpp_idt::id_classt::TEMPLATE
@ TEMPLATE
cpp_idt::this_expr
exprt this_expr
Definition: cpp_id.h:76
cpp_idt::scope_listt
std::vector< cpp_idt * > scope_listt
Definition: cpp_id.h:107
cpp_idt::identifier
irep_idt identifier
Definition: cpp_id.h:72
invariant.h
exprt
Base class for all expressions.
Definition: expr.h:55
cpp_idt::suffix
std::string suffix
Definition: cpp_id.h:79
cpp_idt::id_classt::BLOCK_SCOPE
@ BLOCK_SCOPE
cpp_idt::parent
cpp_idt * parent
Definition: cpp_id.h:109
cpp_idt::sub
cpp_id_mapt sub
Definition: cpp_id.h:104
cpp_idt
Definition: cpp_id.h:22
cpp_idt::id_classt
id_classt
Definition: cpp_id.h:27
expr.h
cpp_idt::is_scope
bool is_scope
Definition: cpp_id.h:43
cpp_idt::is_method
bool is_method
Definition: cpp_id.h:42
cpp_idt::id_classt::SYMBOL
@ SYMBOL
cpp_idt::secondary_scopes
scope_listt secondary_scopes
Definition: cpp_id.h:108
cpp_idt::compound_counter
unsigned compound_counter
Definition: cpp_id.h:80
cpp_idt::id_classt::TEMPLATE_PARAMETER
@ TEMPLATE_PARAMETER
PRECONDITION
#define PRECONDITION(CONDITION)
Definition: invariant.h:463
cpp_idt::is_constructor
bool is_constructor
Definition: cpp_id.h:43
cpp_idt::get_parent
cpp_idt & get_parent() const
Definition: cpp_id.h:82
cpp_idt::id_classt::ROOT_SCOPE
@ ROOT_SCOPE
cpp_idt::set_parent
void set_parent(cpp_idt &_parent)
Definition: cpp_id.h:88
cpp_idt::is_member
bool is_member
Definition: cpp_id.h:42
cpp_idt::is_namespace
bool is_namespace() const
Definition: cpp_id.h:57
cpp_idt::clear
void clear()
Definition: cpp_id.h:94
operator<<
std::ostream & operator<<(std::ostream &out, const cpp_idt &cpp_id)
Definition: cpp_id.cpp:92
cpp_idt::id_classt::TEMPLATE_SCOPE
@ TEMPLATE_SCOPE
cpp_idt::using_scopes
scope_listt using_scopes
Definition: cpp_id.h:108
cpp_idt::is_enum
bool is_enum() const
Definition: cpp_id.h:52
cpp_idt::print_fields
void print_fields(std::ostream &out, unsigned indent=0) const
Definition: cpp_id.cpp:44
cpp_idt::id_classt::TYPEDEF
@ TYPEDEF
cpp_idt::is_static_member
bool is_static_member
Definition: cpp_id.h:42
cpp_idt::id_class
id_classt id_class
Definition: cpp_id.h:45
cpp_idt::cpp_idt
cpp_idt()
Definition: cpp_id.cpp:18
cpp_idt::prefix
std::string prefix
Definition: cpp_id.h:79
cpp_idt::print
void print(std::ostream &out, unsigned indent=0) const
Definition: cpp_id.cpp:31
cpp_idt::is_template_scope
bool is_template_scope() const
Definition: cpp_id.h:67
cpp_idt::base_name
irep_idt base_name
Definition: cpp_id.h:72
cpp_idt::id_classt::ENUM
@ ENUM
cpp_idt::id_classt::NAMESPACE
@ NAMESPACE