CodeSonar C++ API
[For improved navigation, enable JavaScript.]
cs_point.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023, an unpublished work by CodeSecure, Inc.
3  * ALL RIGHTS RESERVED
4  *
5  * Copyright (c) 2013-2023, an unpublished work by GrammaTech, Inc.
6  * ALL RIGHTS RESERVED
7  *
8  * This software is furnished under a license and may be used and
9  * copied only in accordance with the terms of such license and the
10  * inclusion of the above copyright notice. This software or any
11  * other copies thereof may not be provided or otherwise made
12  * available to any other person. Title to and ownership of the
13  * software is retained by CodeSecure, Inc.
14  */
15 
16 #ifndef CS_POINT_HPP
17 #define CS_POINT_HPP
18 
19 //#include "csurf/src/api/cpp/cs_cfg_set.hpp"
20 //#include "csurf/src/api/cpp/cs_basic_block.hpp"
21 #include "cs_point_decl.hpp"
22 #include "cs_symbol_decl.hpp"
23 #include "cs_procedure_decl.hpp"
24 #include "cs_basic_block_decl.hpp"
25 #include "cs_cfg_edge_set.hpp"
26 #include "cs_pdg_edge_set.hpp"
27 #include "cs_labeled_pdg_edge_set.hpp"
28 
31 namespace cs{
33  inline basic_block point::get_basic_block() const
34  {
35  cs_basic_block rv;
36  check(cs_pdg_vertex_basic_block(inner, &rv));
37  return basic_block::;
38  }
42  {
43  cs_pdg rv;
44  check(cs_pdg_vertex_pdg(inner, &rv));
45  return procedure::;
46  }
47 
48  inline procedure point::callee() const
49  {
50  cs_pdg rv;
51  check(cs_pdg_vertex_callee(inner, &rv));
52  return procedure::;
53  }
54 
56  inline symbol point::declared_symbol() const
57  {
58  cs_abs_loc rv;
59  check(cs_pdg_vertex_symbol(inner, &rv));
60  return symbol::;
61  }
62 
63  inline cfg_edge_set point::cfg_successors() const
64  {
65  cs_cfg_edge_set rv;
66  check(cs_pdg_vertex_cfg_successors(inner, &rv));
67  return cglue<cfg_edge_set>::wrap(rv, false);
68  }
69 
70  inline cfg_edge_set point::cfg_predecessors() const
71  {
72  cs_cfg_edge_set rv;
73  check(cs_pdg_vertex_cfg_predecessors(inner, &rv));
74  return cglue<cfg_edge_set>::wrap(rv, false);
75  }
79  {
80  cs_cfg_edge_set rv;
81  check(cs_pdg_vertex_cfg_inter_targets(inner, &rv));
82  return cglue<cfg_edge_set>::wrap(rv, false);
83  }
84 
86  inline cfg_edge_set point::cfg_inter_sources() const
87  {
88  cs_cfg_edge_set rv;
89  check(cs_pdg_vertex_cfg_inter_sources(inner, &rv));
90  return cglue<cfg_edge_set>::wrap(rv, false);
91  }
95  {
96  cs_const_cfg_edge_set rv;
97  check(cs_pdg_vertex_cfg_targets(inner, &rv));
98  return cglue<cfg_edge_set>::wrap(rv, true);
99  }
100 
102  inline cfg_edge_set point::cfg_sources() const
103  {
104  cs_const_cfg_edge_set rv;
105  check(cs_pdg_vertex_cfg_sources(inner, &rv));
106  return cglue<cfg_edge_set>::wrap(rv, true);
107  }
111  inline pdg_edge_set point::inter_targets() const
112  {
113  cs_const_pdg_edge_set rv;
114  check(cs_pdg_vertex_inter_targets(
115  inner, &rv));
116  return cglue<pdg_edge_set>::wrap(rv, true);
117  }
118 
119  inline pdg_edge_set point::inter_sources() const
120  {
121  cs_const_pdg_edge_set rv;
122  check(cs_pdg_vertex_inter_sources(
123  inner, &rv));
124  return cglue<pdg_edge_set>::wrap(rv, true);
125  }
126 
127  inline pdg_edge_set point::intra_targets() const
128  {
129  cs_const_pdg_edge_set rv;
130  check(cs_pdg_vertex_intra_targets(
131  inner, &rv));
132  return cglue<pdg_edge_set>::wrap(rv, true);
133  }
134 
135  inline pdg_edge_set point::intra_sources() const
136  {
137  cs_const_pdg_edge_set rv;
138  check(cs_pdg_vertex_intra_sources(
139  inner, &rv));
140  return cglue<pdg_edge_set>::wrap(rv, true);
141  }
142 
143  inline labeled_pdg_edge_set point::labeled_intra_control_sources() const
144  {
145  cs_const_labeled_pdg_edge_set rv;
146  check(cs_pdg_vertex_labeled_intra_control_sources(inner, &rv));
147  return cglue<labeled_pdg_edge_set>::wrap(rv, true);
148  }
149 
150  inline labeled_pdg_edge_set point::labeled_intra_control_targets() const
151  {
152  cs_const_labeled_pdg_edge_set rv;
153  check(cs_pdg_vertex_labeled_intra_control_targets(inner, &rv));
154  return cglue<labeled_pdg_edge_set>::wrap(rv, true);
155  }
159  inline std::vector<exceptional_return> point::exceptional_returns() const
160  {
161  typedef scratchpad<exceptional_return> sp;
162  sp::to_vector_functor1_card<point, cs_pdg_vertex_exceptional_returns>
163  functor(inner);
164  return sp::to_vector(functor);
165  }
168  inline compunit_points
169  cglue<compunit_points>::wrap(const cs_uid_pdgvslist &c)
170  {
171  std::vector<std::pair<procedure, point_set> > vec;
172  size_t i;
173  for( i = 0; i < c.npdgs; i++ )
174  {
175  vec.push_back(
176  std::pair<procedure, point_set>(
177  cglue<procedure>::wrap(c.pdgs[i].pdg),
178  cglue<point_set>::wrap(c.pdgs[i].pdg_vertex_set,
179  false)));
180  }
181  return compunit_points(
182  cglue<compunit>::wrap(c.uid),
183  vec );
184  }
185 
186  inline compunit_points_pair
187  cglue<compunit_points_pair>::wrap(const cs_uid_pdgvs_pair &c)
188  {
189  return compunit_points_pair(
190  cglue<compunit>::wrap(c.uid),
191  cglue<point_set>::wrap(c.pdg_vertex_set, false) );
192  }
193 
194  inline point cglue<point>::wrap(const cs_pdg_vertex &c)
195  { return point(c); }
196 
197  inline cs_pdg_vertex cglue<point>::unwrap(const point &c)
198  { return c.unwrap(); }
199 
200  inline exceptional_return
201  cglue<exceptional_return>::wrap(const cs_exceptional_return &c)
202  {
203  return exceptional_return(
204  cglue<point>::wrap(c.vertex),
205  c.label);
206  }
207 }
208 
209 #endif /* CS_POINT_HPP */
Namespace for CodeSonar/CodeSurfer API.
Definition: cs_ast.hpp:33
cfg_edge_set cfg_targets() const
Get the intra-procedural successors of a point.
Definition: cs_point.hpp:94
A function or variable.
Definition: cs_symbol_decl.hpp:243
cfg_edge_set cfg_inter_targets() const
Get the inter-procedural successors of a point.
Definition: cs_point.hpp:78
std::pair< cs::point, std::string > exceptional_return
A std::pair (p, s) where:
Definition: cs_tplt_instantiations.hpp:394
A single procedure/function/method.
Definition: cs_procedure_decl.hpp:173
std::pair< cs::compunit, cs::point_set > compunit_points_pair
A std::pair (c, ps) where:
Definition: cs_tplt_instantiations.hpp:342
procedure get_procedure() const
Get the procedure containing a point.
Definition: cs_point.hpp:41
A set of cfg_edge.
Definition: cs_tplt_instantiations.hpp:248
std::pair< cs::compunit, cs::procedure_and_points_vector > compunit_points
A std::pair (c, ppv) where:
Definition: cs_tplt_instantiations.hpp:332
procedure callee() const
Get the callee procedure associated with a call-site point.
Definition: cs_point.hpp:48