CBMC
jsil_types.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Jsil Language
4 
5 Author: Daiva Naudziuniene, daivan@amazon.com
6 
7 \*******************************************************************/
8 
11 
12 #ifndef CPROVER_JSIL_JSIL_TYPES_H
13 #define CPROVER_JSIL_JSIL_TYPES_H
14 
15 #include <util/c_types.h>
16 
32 
33 bool jsil_is_subtype(const typet &type1, const typet &type2);
34 bool jsil_incompatible_types(const typet &type1, const typet &type2);
35 typet jsil_union(const typet &type1, const typet &type2);
36 
38 {
39 public:
41  code_typet(code)
42  {
43  set("jsil_builtin_proceduret", true);
44  }
45 };
46 
48  code_typet &code)
49 {
50  assert(code.get_bool("jsil_builtin_proceduret"));
51  return static_cast<jsil_builtin_code_typet &>(code);
52 }
53 
54 inline bool is_jsil_builtin_code_type(const typet &type)
55 {
56  return type.id()==ID_code &&
57  type.get_bool("jsil_builtin_proceduret");
58 }
59 
61 {
62 public:
64  code_typet(code)
65  {
66  set("jsil_spec_proceduret", true);
67  }
68 };
69 
71  code_typet &code)
72 {
73  assert(code.get_bool("jsil_spec_proceduret"));
74  return static_cast<jsil_spec_code_typet &>(code);
75 }
76 
77 inline bool is_jsil_spec_code_type(const typet &type)
78 {
79  return type.id()==ID_code &&
80  type.get_bool("jsil_spec_proceduret");
81 }
82 
84 {
85 public:
87 
88  explicit jsil_union_typet(const typet &type)
89  :jsil_union_typet(std::vector<typet>({type})) { }
90 
91  explicit jsil_union_typet(const std::vector<typet> &types);
92 
93  jsil_union_typet union_with(const jsil_union_typet &other) const;
94 
96 
97  bool is_subtype(const jsil_union_typet &other) const;
98 
99  const typet &to_type() const;
100 };
101 
103 {
104  assert(type.id()==ID_union);
105  return static_cast<jsil_union_typet &>(type);
106 }
107 
108 inline const jsil_union_typet &to_jsil_union_type(const typet &type)
109 {
110  assert(type.id()==ID_union);
111  return static_cast<const jsil_union_typet &>(type);
112 }
113 
114 #endif // CPROVER_JSIL_JSIL_TYPES_H
jsil_reference_type
typet jsil_reference_type()
Definition: jsil_types.cpp:48
jsil_object_type
typet jsil_object_type()
Definition: jsil_types.cpp:64
jsil_prim_type
typet jsil_prim_type()
Definition: jsil_types.cpp:43
jsil_user_object_type
typet jsil_user_object_type()
Definition: jsil_types.cpp:70
jsil_kind
typet jsil_kind()
Definition: jsil_types.cpp:90
typet
The type of an expression, extends irept.
Definition: type.h:28
jsil_value_or_reference_type
typet jsil_value_or_reference_type()
Definition: jsil_types.cpp:29
jsil_union_typet::intersect_with
jsil_union_typet intersect_with(const jsil_union_typet &other) const
Definition: jsil_types.cpp:169
to_jsil_builtin_code_type
jsil_builtin_code_typet & to_jsil_builtin_code_type(code_typet &code)
Definition: jsil_types.h:47
jsil_union_typet
Definition: jsil_types.h:83
jsil_null_type
typet jsil_null_type()
Definition: jsil_types.cpp:80
jsil_builtin_code_typet::jsil_builtin_code_typet
jsil_builtin_code_typet(code_typet &code)
Definition: jsil_types.h:40
jsil_union_typet::to_type
const typet & to_type() const
Definition: jsil_types.cpp:219
jsil_empty_type
typet jsil_empty_type()
Definition: jsil_types.cpp:95
jsil_value_or_empty_type
typet jsil_value_or_empty_type()
Definition: jsil_types.cpp:24
jsil_is_subtype
bool jsil_is_subtype(const typet &type1, const typet &type2)
Definition: jsil_types.cpp:100
to_jsil_spec_code_type
jsil_spec_code_typet & to_jsil_spec_code_type(code_typet &code)
Definition: jsil_types.h:70
jsil_builtin_object_type
typet jsil_builtin_object_type()
Definition: jsil_types.cpp:75
irept::set
void set(const irep_idt &name, const irep_idt &value)
Definition: irep.h:420
jsil_value_type
typet jsil_value_type()
Definition: jsil_types.cpp:34
jsil_union
typet jsil_union(const typet &type1, const typet &type2)
Definition: jsil_types.cpp:121
code_typet
Base type of functions.
Definition: std_types.h:538
irept::id
const irep_idt & id() const
Definition: irep.h:396
union_typet
The union type.
Definition: c_types.h:124
jsil_union_typet::is_subtype
bool is_subtype(const jsil_union_typet &other) const
Definition: jsil_types.cpp:186
jsil_union_typet::jsil_union_typet
jsil_union_typet(const typet &type)
Definition: jsil_types.h:88
jsil_union_typet::jsil_union_typet
jsil_union_typet()
Definition: jsil_types.h:86
jsil_variable_reference_type
typet jsil_variable_reference_type()
Definition: jsil_types.cpp:59
to_jsil_union_type
jsil_union_typet & to_jsil_union_type(typet &type)
Definition: jsil_types.h:102
jsil_builtin_code_typet
Definition: jsil_types.h:37
is_jsil_builtin_code_type
bool is_jsil_builtin_code_type(const typet &type)
Definition: jsil_types.h:54
jsil_spec_code_typet
Definition: jsil_types.h:60
jsil_union_typet::union_with
jsil_union_typet union_with(const jsil_union_typet &other) const
Definition: jsil_types.cpp:152
jsil_spec_code_typet::jsil_spec_code_typet
jsil_spec_code_typet(code_typet &code)
Definition: jsil_types.h:63
is_jsil_spec_code_type
bool is_jsil_spec_code_type(const typet &type)
Definition: jsil_types.h:77
jsil_incompatible_types
bool jsil_incompatible_types(const typet &type1, const typet &type2)
Definition: jsil_types.cpp:115
c_types.h
irept::get_bool
bool get_bool(const irep_idt &name) const
Definition: irep.cpp:58
jsil_undefined_type
typet jsil_undefined_type()
Definition: jsil_types.cpp:85
jsil_member_reference_type
typet jsil_member_reference_type()
Definition: jsil_types.cpp:54
jsil_any_type
typet jsil_any_type()
Definition: jsil_types.cpp:18