cprover
cpp_item.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_ITEM_H
13 #define CPROVER_CPP_CPP_ITEM_H
14 
15 #include <cassert>
16 
17 #include "cpp_declaration.h"
18 #include "cpp_linkage_spec.h"
19 #include "cpp_namespace_spec.h"
20 #include "cpp_using.h"
21 #include "cpp_static_assert.h"
22 
23 class cpp_itemt:public irept
24 {
25 public:
26  // declaration
27 
29  {
30  id(ID_cpp_declaration);
31  return (cpp_declarationt &)*this;
32  }
33 
35  {
36  assert(is_declaration());
37  return (cpp_declarationt &)*this;
38  }
39 
41  {
42  assert(is_declaration());
43  return (const cpp_declarationt &)*this;
44  }
45 
46  bool is_declaration() const
47  {
48  return id()==ID_cpp_declaration;
49  }
50 
51  // linkage spec
52 
54  {
55  id(ID_cpp_linkage_spec);
56  return (cpp_linkage_spect &)*this;
57  }
58 
60  {
61  assert(is_linkage_spec());
62  return (cpp_linkage_spect &)*this;
63  }
64 
66  {
67  assert(is_linkage_spec());
68  return (const cpp_linkage_spect &)*this;
69  }
70 
71  bool is_linkage_spec() const
72  {
73  return id()==ID_cpp_linkage_spec;
74  }
75 
76  // namespace
77 
79  {
80  id(ID_cpp_namespace_spec);
81  return (cpp_namespace_spect &)*this;
82  }
83 
85  {
86  assert(is_namespace_spec());
87  return (cpp_namespace_spect &)*this;
88  }
89 
91  {
92  assert(is_namespace_spec());
93  return (const cpp_namespace_spect &)*this;
94  }
95 
96  bool is_namespace_spec() const
97  {
98  return id()==ID_cpp_namespace_spec;
99  }
100 
101  // using
102 
104  {
105  id(ID_cpp_using);
106  return (cpp_usingt &)*this;
107  }
108 
110  {
111  assert(is_using());
112  return (cpp_usingt &)*this;
113  }
114 
115  const cpp_usingt &get_using() const
116  {
117  assert(is_using());
118  return (const cpp_usingt &)*this;
119  }
120 
121  bool is_using() const
122  {
123  return id()==ID_cpp_using;
124  }
125 
126  // static assertion
127 
129  {
130  id(ID_cpp_static_assert);
131  return (cpp_static_assertt &)*this;
132  }
133 
135  {
136  assert(is_static_assert());
137  return (cpp_static_assertt &)*this;
138  }
139 
140  bool is_static_assert() const
141  {
142  return id()==ID_cpp_static_assert;
143  }
144 
146  {
147  return static_cast<const source_locationt &>(
148  find(ID_C_source_location));
149  }
150 };
151 
152 #endif // CPROVER_CPP_CPP_ITEM_H
cpp_itemt::make_declaration
cpp_declarationt & make_declaration()
Definition: cpp_item.h:28
cpp_itemt::make_static_assert
cpp_static_assertt & make_static_assert()
Definition: cpp_item.h:128
cpp_itemt::get_namespace_spec
const cpp_namespace_spect & get_namespace_spec() const
Definition: cpp_item.h:90
cpp_itemt::get_declaration
cpp_declarationt & get_declaration()
Definition: cpp_item.h:34
irept::find
const irept & find(const irep_namet &name) const
Definition: irep.cpp:103
cpp_declaration.h
C++ Language Type Checking.
cpp_static_assert.h
C++ Language Type Checking.
cpp_itemt::source_location
const source_locationt & source_location() const
Definition: cpp_item.h:145
cpp_itemt::get_using
const cpp_usingt & get_using() const
Definition: cpp_item.h:115
cpp_itemt::get_linkage_spec
cpp_linkage_spect & get_linkage_spec()
Definition: cpp_item.h:59
cpp_namespace_spect
Definition: cpp_namespace_spec.h:20
cpp_usingt
Definition: cpp_using.h:18
cpp_itemt::get_using
cpp_usingt & get_using()
Definition: cpp_item.h:109
cpp_itemt::is_linkage_spec
bool is_linkage_spec() const
Definition: cpp_item.h:71
cpp_using.h
C++ Language Type Checking.
cpp_itemt::get_declaration
const cpp_declarationt & get_declaration() const
Definition: cpp_item.h:40
cpp_declarationt
Definition: cpp_declaration.h:24
irept::id
const irep_idt & id() const
Definition: irep.h:418
cpp_itemt::is_static_assert
bool is_static_assert() const
Definition: cpp_item.h:140
cpp_itemt::get_linkage_spec
const cpp_linkage_spect & get_linkage_spec() const
Definition: cpp_item.h:65
cpp_itemt::is_using
bool is_using() const
Definition: cpp_item.h:121
source_locationt
Definition: source_location.h:20
cpp_linkage_spect
Definition: cpp_linkage_spec.h:16
cpp_itemt::make_using
cpp_usingt & make_using()
Definition: cpp_item.h:103
cpp_namespace_spec.h
C++ Language Type Checking.
cpp_static_assertt
Definition: cpp_static_assert.h:18
cpp_linkage_spec.h
C++ Language Type Checking.
cpp_itemt::make_linkage_spec
cpp_linkage_spect & make_linkage_spec()
Definition: cpp_item.h:53
cpp_itemt::is_namespace_spec
bool is_namespace_spec() const
Definition: cpp_item.h:96
cpp_itemt::get_static_assert
cpp_static_assertt & get_static_assert()
Definition: cpp_item.h:134
irept
There are a large number of kinds of tree structured or tree-like data in CPROVER.
Definition: irep.h:394
cpp_itemt::make_namespace_spec
cpp_namespace_spect & make_namespace_spec()
Definition: cpp_item.h:78
cpp_itemt::get_namespace_spec
cpp_namespace_spect & get_namespace_spec()
Definition: cpp_item.h:84
cpp_itemt
Definition: cpp_item.h:24
cpp_itemt::is_declaration
bool is_declaration() const
Definition: cpp_item.h:46