File: require_type.h

package info (click to toggle)
cbmc 6.6.0-4
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 153,852 kB
  • sloc: cpp: 386,459; ansic: 114,466; java: 28,405; python: 6,003; yacc: 4,552; makefile: 4,041; lex: 2,487; xml: 2,388; sh: 2,050; perl: 557; pascal: 184; javascript: 163; ada: 36
file content (140 lines) | stat: -rw-r--r-- 4,334 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*******************************************************************\

Module: Unit test utilities

Author: Diffblue Ltd.

\*******************************************************************/

/// \file
/// Helper functions for requiring specific types
/// If the type is of the wrong type, throw a CATCH exception
/// Also checks associated properties and returns a casted version of the
/// expression.

#ifndef CPROVER_JAVA_TESTING_UTILS_REQUIRE_TYPE_H
#define CPROVER_JAVA_TESTING_UTILS_REQUIRE_TYPE_H

#include <util/std_types.h>
#include <java_bytecode/java_types.h>

// NOLINTNEXTLINE(readability/namespace)
namespace require_type
{
pointer_typet
require_pointer(const typet &type, const std::optional<typet> &subtype);

#if defined(__GNUC__) && __GNUC__ >= 14
[[gnu::no_dangling]]
#endif
const struct_tag_typet &
require_struct_tag(const typet &type, const irep_idt &identifier = "");

pointer_typet require_pointer_to_tag(
  const typet &type,
  const irep_idt &identifier = irep_idt());

java_class_typet::componentt require_component(
  const java_class_typet &java_class_type,
  const irep_idt &component_name);

struct_typet::componentt require_component(
  const struct_typet &struct_type,
  const irep_idt &component_name);

code_typet require_code(const typet &type);
java_method_typet require_java_method(const typet &type);

code_typet::parametert
require_parameter(const code_typet &function_type, const irep_idt &param_name);

code_typet require_code(const typet &type, const size_t num_params);
java_method_typet
require_java_method(const typet &type, const size_t num_params);

// A mini DSL for describing an expected set of type arguments for a
// java_generic_typet
enum class type_argument_kindt
{
  Inst,
  Var
};
struct expected_type_argumentt
{
  type_argument_kindt kind;
  irep_idt description;
};
typedef std::initializer_list<expected_type_argumentt>
  expected_type_argumentst;

java_generic_typet require_java_generic_type(const typet &type);

java_generic_typet require_java_generic_type(
  const typet &type,
  const require_type::expected_type_argumentst &type_expectations);

java_generic_parametert require_java_generic_parameter(const typet &type);

java_generic_parametert require_java_generic_parameter(
  const typet &type,
  const irep_idt &parameter);

const typet &require_java_non_generic_type(
  const typet &type,
  const std::optional<struct_tag_typet> &expect_subtype);

class_typet require_complete_class(const typet &class_type);

class_typet require_incomplete_class(const typet &class_type);

java_generic_class_typet require_java_generic_class(const typet &class_type);

java_generic_class_typet require_java_generic_class(
  const typet &class_type,
  const std::initializer_list<irep_idt> &type_variables);

java_generic_class_typet
require_complete_java_generic_class(const typet &class_type);

java_generic_class_typet require_complete_java_generic_class(
  const typet &class_type,
  const std::initializer_list<irep_idt> &type_parameters);

java_implicitly_generic_class_typet
require_java_implicitly_generic_class(const typet &class_type);

java_implicitly_generic_class_typet require_java_implicitly_generic_class(
  const typet &class_type,
  const std::initializer_list<irep_idt> &implicit_type_variables);

java_implicitly_generic_class_typet
require_complete_java_implicitly_generic_class(const typet &class_type);

java_implicitly_generic_class_typet
require_complete_java_implicitly_generic_class(
  const typet &class_type,
  const std::initializer_list<irep_idt> &implicit_type_variables);

java_class_typet require_java_non_generic_class(const typet &class_type);

java_class_typet
require_complete_java_non_generic_class(const typet &class_type);

java_generic_struct_tag_typet require_java_generic_struct_tag_type(
  const typet &type,
  const std::string &identifier);

java_generic_struct_tag_typet require_java_generic_struct_tag_type(
  const typet &type,
  const std::string &identifier,
  const require_type::expected_type_argumentst &type_expectations);

typedef java_class_typet::java_lambda_method_handlest
  java_lambda_method_handlest;

java_lambda_method_handlest require_lambda_method_handles(
  const java_class_typet &class_type,
  const std::vector<std::string> &expected_identifiers);
}

#endif // CPROVER_JAVA_TESTING_UTILS_REQUIRE_TYPE_H