ESBMC
Efficient SMT-based Context-Bounded Model Checker
Loading...
Searching...
No Matches
irep.h
Go to the documentation of this file.
1#ifndef CPROVER_IREP_H
2#define CPROVER_IREP_H
3
4#include <cassert>
5#include <list>
6#include <map>
7#include <string>
8#include <vector>
9#include <mutex>
10
11#define SHARING
12
13#include <util/irep/irep_idt.h>
14
15typedef std::hash<irep_idt> irep_id_hash;
16
17#define forall_irep(it, irep) \
18 for (irept::subt::const_iterator it = (irep).begin(); it != (irep).end(); \
19 it++)
20
21#define Forall_irep(it, irep) \
22 for (irept::subt::iterator it = (irep).begin(); it != (irep).end(); it++)
23
24#define forall_named_irep(it, irep) \
25 for (irept::named_subt::const_iterator it = (irep).begin(); \
26 it != (irep).end(); \
27 it++)
28
29#define Forall_named_irep(it, irep) \
30 for (irept::named_subt::iterator it = (irep).begin(); it != (irep).end(); \
31 it++)
32
33class typet;
34
35class irept
36{
37public:
38 typedef std::vector<irept> subt;
39 // typedef std::list<irept> subt;
40
41 typedef std::map<irep_idt, irept> named_subt;
42
43 // Dump contents of irep to stdout. Debugging only.
44 void dump() const;
45
46 bool is_nil() const
47 {
48 return id() == "nil";
49 }
50 bool is_not_nil() const
51 {
52 return id() != "nil";
53 }
54
55 explicit irept(const irep_idt &_id);
56
57#ifdef SHARING
58 inline irept() : data(nullptr)
59 {
60 }
61
62 inline irept(const irept &irep)
63 {
64 // We only need to lock the source's data to safely read the pointer
65 // and increment its reference count.
66 dt *source_data = nullptr;
67 if (irep.data)
68 {
69 std::lock_guard<std::mutex> lock(irep.data->dt_mutex);
70 source_data = irep.data;
71 if (source_data)
72 source_data->ref_count++;
73 }
74 data = source_data;
75 }
76
77 inline irept &operator=(const irept &irep)
78 {
79 if (this == &irep)
80 return *this;
81
82 dt *new_data = nullptr;
83 if (irep.data)
84 {
85 std::lock_guard<std::mutex> lock(irep.data->dt_mutex);
86 new_data = irep.data;
87 if (new_data)
88 new_data->ref_count++;
89 }
90
91 dt *old_data = data;
92 data = new_data;
93 remove_ref(old_data);
94
95 return *this;
96 }
97
99 {
101 data = nullptr;
102 }
103#else
104 irept()
105 {
106 }
107#endif
108
109 inline const irep_idt &id() const
110 {
111 return read().data;
112 }
113
114 inline const std::string &id_string() const
115 {
116 return read().data.as_string();
117 }
118
119 inline void id(const irep_idt &_data)
120 {
121 write().data = _data;
122 }
123
124 // These methods should be protected; however to make things play nice with
125 // the C++ frontend right now, they're made public.
126 // protected:
127 // This class has to be able to fiddle with ireps directly.
129
130 const irept &find(const irep_idt &name) const;
131 irept &add(const irep_idt &name);
132
133 const std::string &get_string(const irep_idt &name) const
134 {
135 return get(name).as_string();
136 }
137
138 const irep_idt &get(const irep_idt &name) const;
139 bool get_bool(const irep_idt &name) const;
140
141 inline void set(const irep_idt &name, const irep_idt &value)
142 {
143 add(name).id(value);
144 }
145
146 void set(const irep_idt &name, const long value);
147 void set(const irep_idt &name, const irept &irep);
148 // public:
149 void remove(const irep_idt &name);
150 void move_to_sub(irept &irep);
151 void move_to_named_sub(const irep_idt &name, irept &irep);
152
153 inline typet &type()
154 {
155 return (typet &)(add(s_type));
156 }
157 inline const typet &type() const
158 {
159 return (typet &)(find(s_type));
160 }
161
162 inline bool is_identifier_set() const
163 {
164 return (get(a_identifier) != "");
165 }
166
167 inline const irep_idt &identifier() const
168 {
169 return get(a_identifier);
170 }
171
172 inline const irep_idt &width() const
173 {
174 return get(a_width);
175 }
176
177 inline const irep_idt &statement() const
178 {
179 return get(a_statement);
180 }
181
182 inline const irep_idt &name() const
183 {
184 return get(a_name);
185 }
186
187 inline const irep_idt &component_name() const
188 {
189 return get(a_comp_name);
190 }
191
192 inline const irep_idt &tag() const
193 {
194 return get(a_tag);
195 }
196
197 inline const irep_idt &from() const
198 {
199 return get(a_from);
200 }
201
202 inline const irep_idt &file() const
203 {
204 return get(a_file);
205 }
206
207 inline const irep_idt &line() const
208 {
209 return get(a_line);
210 }
211
212 inline const irep_idt &function() const
213 {
214 return get(a_function);
215 }
216
217 inline const irept &function_irep() const
218 {
219 return find(a_function);
220 }
221
222 inline const irep_idt &column() const
223 {
224 return get(a_column);
225 }
226
227 inline const irep_idt &destination() const
228 {
229 return get(a_destination);
230 }
231
232 inline const irep_idt &access() const
233 {
234 return get(a_access);
235 }
236
237 inline const irep_idt &base_name() const
238 {
239 return get(a_base_name);
240 }
241
242 inline const irep_idt &comment() const
243 {
244 return get(a_comment);
245 }
246
247 inline const irep_idt &event() const
248 {
249 return get(a_event);
250 }
251
252 inline const irept &event_irep() const
253 {
254 return find(a_event);
255 }
256
257 inline const irep_idt &literal() const
258 {
259 return get(a_literal);
260 }
261
262 inline const irep_idt &loopid() const
263 {
264 return get(a_loopid);
265 }
266
267 inline const irep_idt &mode() const
268 {
269 return get(a_mode);
270 }
271
272 inline const irep_idt &module() const
273 {
274 return get(a_module);
275 }
276
277 inline const irep_idt &pretty_name() const
278 {
279 return get(a_pretty_name);
280 }
281
282 inline const irep_idt &derived_this_arg() const
283 {
284 return get(a_derived_this_arg);
285 }
286
287 inline bool base_ctor_derived() const
288 {
290 }
291
292 inline bool need_vptr_init() const
293 {
295 }
296
297 inline const irep_idt &property() const
298 {
299 return get(a_property);
300 }
301
302 inline const irep_idt &size() const
303 {
304 return get(a_size);
305 }
306
307 inline const irept &size_irep() const
308 {
309 return find(a_size);
310 }
311
312 inline const irep_idt &integer_bits() const
313 {
314 return get(a_integer_bits);
315 }
316
317 inline const irep_idt &to() const
318 {
319 return get(a_to);
320 }
321
322 inline const irep_idt &failed_symbol() const
323 {
324 return get(a_failed_symbol);
325 }
326
327 inline const irep_idt &type_id() const
328 {
329 return get(a_type_id);
330 }
331
332 inline const irept &arguments() const
333 {
334 return find(s_arguments);
335 }
336
337 inline const irept &components() const
338 {
339 return find(s_components);
340 }
341
342 inline const irept &cmt_type() const
343 {
344 return find(a_cmt_type);
345 }
346
347 inline const irept &return_type() const
348 {
349 return find(s_return_type);
350 }
351
352 inline const irept &body() const
353 {
354 return find(s_body);
355 }
356
357 inline const irept &member_irep() const
358 {
359 return find(s_member);
360 }
361
362 inline const irept &labels_irep() const
363 {
364 return find(s_labels);
365 }
366
367 inline const irept &bv() const
368 {
369 return find(s_bv);
370 }
371
372 inline const irept &targets() const
373 {
374 return find(s_targets);
375 }
376
377 inline const irept &variables() const
378 {
379 return find(s_variables);
380 }
381
382 inline const irept &object_type() const
383 {
384 return find(a_object_type);
385 }
386
387 inline const irept &initializer() const
388 {
389 return find(s_initializer);
390 }
391
392 inline const irept &cmt_size() const
393 {
394 return find(a_cmt_size);
395 }
396
397 inline const irept &code() const
398 {
399 return find(a_code);
400 }
401
402 inline const irept &guard() const
403 {
404 return find(a_guard);
405 }
406
407 inline const irept &location() const
408 {
409 return find(a_location);
410 }
411
412 inline const irept &declaration_type() const
413 {
414 return find(s_declaration_type);
415 }
416
417 inline const irept &decl_value() const
418 {
419 return find(s_decl_value);
420 }
421
422 inline const irept &end_location() const
423 {
424 return find(a_end_location);
425 }
426
427 inline const irept &symvalue() const
428 {
429 return find(s_symvalue);
430 }
431
432 inline const irept &cmt_location() const
433 {
434 return find(s_cmt_location);
435 }
436
437 inline const irept &decl_ident() const
438 {
439 return find(s_decl_ident);
440 }
441
442 inline bool is_decl_ident_set() const
443 {
444 return (get(s_decl_ident) != "");
445 }
446
447 inline const irept &elements() const
448 {
449 return find(s_elements);
450 }
451
452 inline bool is_dynamic_set() const
453 {
454 const irep_idt &c = get(a_dynamic);
455 return (c != "");
456 }
457
458 inline bool dynamic() const
459 {
460 return get_bool(a_dynamic);
461 }
462
463 inline const irep_idt &cmt_base_name() const
464 {
465 return get(a_cmt_base_name);
466 }
467
468 inline const irep_idt &id_class() const
469 {
470 return get(a_id_class);
471 }
472
473 inline const irep_idt &cmt_identifier() const
474 {
475 return get(a_cmt_identifier);
476 }
477
478 inline const irep_idt &cformat() const
479 {
480 return get(a_cformat);
481 }
482
489 inline const irep_idt &member_name() const
490 {
491 return get(a_member_name);
492 }
493
503 inline const irep_idt &cpp_type() const
504 {
505 return get(a_cpp_type);
506 }
507
508 inline const irep_idt &cmt_width() const
509 {
510 return get(a_cmt_width);
511 }
512
513 inline const irept &offsetof_type() const
514 {
515 return find(s_offsetof_type);
516 }
517
518 inline bool axiom() const
519 {
520 return get_bool(a_axiom);
521 }
522
523 inline bool cmt_constant() const
524 {
525 return get_bool(a_cmt_constant);
526 }
527
528 inline bool dfault() const
529 {
530 return get_bool(a_default);
531 }
532
533 inline bool ellipsis() const
534 {
535 return get_bool(a_ellipsis);
536 }
537
538 inline bool explict() const
539 {
540 return get_bool(a_explicit);
541 }
542
543 inline bool file_local() const
544 {
545 return get_bool(a_file_local);
546 }
547
548 inline bool hex_or_oct() const
549 {
550 return get_bool(a_hex_or_oct);
551 }
552
553 inline bool hide() const
554 {
555 return get_bool(a_hide);
556 }
557
558 inline bool implicit() const
559 {
560 return get_bool(a_implicit);
561 }
562
563 inline bool incomplete() const
564 {
565 return get_bool(a_incomplete);
566 }
567
568 inline bool initialization() const
569 {
571 }
572
573 inline bool inlined() const
574 {
575 return get_bool(a_inlined);
576 }
577
578 inline bool invalid_object() const
579 {
581 }
582
583 inline bool is_parameter() const
584 {
585 return get_bool(a_is_parameter);
586 }
587
588 inline bool is_expression() const
589 {
591 }
592
593 inline bool is_extern() const
594 {
595 return get_bool(a_is_extern);
596 }
597
598 inline bool is_macro() const
599 {
600 return get_bool(a_is_macro);
601 }
602
603 inline bool is_thread_local() const
604 {
606 }
607
608 inline bool is_type() const
609 {
610 return get_bool(a_is_type);
611 }
612
613 inline bool lvalue() const
614 {
615 return get_bool(a_lvalue);
616 }
617
618 inline bool reference() const
619 {
620 return get_bool(a_reference);
621 }
622
623 inline bool restricted() const
624 {
625 return get_bool(a_restricted);
626 }
627
628 inline bool static_lifetime() const
629 {
631 }
632
633 inline bool theorem() const
634 {
635 return get_bool(a_theorem);
636 }
637
638 inline bool cmt_unsigned() const
639 {
640 return get_bool(a_cmt_unsigned);
641 }
642
643 inline bool user_provided() const
644 {
646 }
647
648 inline bool cmt_volatile() const
649 {
650 return get_bool(a_cmt_volatile);
651 }
652
653 inline bool zero_initializer() const
654 {
656 }
657
658 inline void arguments(const irept &val)
659 {
660 set(s_arguments, val);
661 }
662
663 inline void decl_ident(const irept &val)
664 {
665 set(s_decl_ident, val);
666 }
667
668 inline void identifier(const irep_idt ident)
669 {
670 set(a_identifier, ident);
671 }
672
673 inline void statement(const irep_idt statm)
674 {
675 set(a_statement, statm);
676 }
677
678 inline void comment(const irep_idt cmt)
679 {
680 set(a_comment, cmt);
681 }
682
683 inline void component_name(const irep_idt name)
684 {
686 }
687
688 inline void hex_or_oct(const irep_idt which)
689 {
690 set(a_hex_or_oct, which);
691 }
692
693 inline void hex_or_oct(bool which)
694 {
695 set(a_hex_or_oct, which);
696 }
697
698 inline void cmt_width(const irep_idt width)
699 {
701 }
702
703 inline void cmt_width(unsigned int width)
704 {
706 }
707
708 inline void width(const irep_idt width)
709 {
710 set(a_width, width);
711 }
712
713 inline void width(unsigned int width)
714 {
715 set(a_width, width);
716 }
717
718 inline void cmt_unsigned(const irep_idt val)
719 {
720 set(a_cmt_unsigned, val);
721 }
722
723 inline void cmt_unsigned(bool val)
724 {
725 set(a_cmt_unsigned, val);
726 }
727
728 inline void property(const irep_idt prop)
729 {
730 set(a_property, prop);
731 }
732
733 inline void cmt_base_name(const irep_idt name)
734 {
736 }
737
738 inline void name(const irep_idt val)
739 {
740 set(a_name, val);
741 }
742
743 inline void cformat(const irep_idt val)
744 {
745 set(a_cformat, val);
746 }
747
748 inline void member_name(const irep_idt val)
749 {
750 set(a_member_name, val);
751 }
752
753 inline void cpp_type(const irep_idt val)
754 {
755 set(a_cpp_type, val);
756 }
757
758 inline void remove_member_name()
759 {
761 }
762
763 inline void flavor(const irep_idt val)
764 {
765 set(a_flavor, val);
766 }
767
768 inline void function(const irep_idt val)
769 {
770 set(a_function, val);
771 }
772
773 inline void size(const irep_idt val)
774 {
775 set(a_size, val);
776 }
777
778 inline void size(const irept &val)
779 {
780 set(a_size, val);
781 }
782
783 inline void user_provided(const irep_idt val)
784 {
785 set(a_user_provided, val);
786 }
787
788 inline void user_provided(bool val)
789 {
790 set(a_user_provided, val);
791 }
792
793 inline void destination(const irep_idt val)
794 {
795 set(a_destination, val);
796 }
797
798 inline void cmt_constant(const irep_idt val)
799 {
800 set(a_cmt_constant, val);
801 }
802
803 inline void cmt_constant(bool val)
804 {
805 set(a_cmt_constant, val);
806 }
807
808 inline void cmt_active(const irep_idt val)
809 {
810 set(a_cmt_active, val);
811 }
812
813 inline void base_name(const irep_idt val)
814 {
815 set(a_base_name, val);
816 }
817
818 inline void code(const irept &val)
819 {
820 set(a_code, val);
821 }
822
823 inline void component(const irep_idt val)
824 {
825 set(a_component, val);
826 }
827
828 inline void component(unsigned int val)
829 {
830 set(a_component, val);
831 }
832
833 inline void dfault(bool val)
834 {
835 set(a_default, val);
836 }
837
838 inline void dynamic(bool val)
839 {
840 set(a_dynamic, val);
841 }
842
843 inline void end_location(const irept &val)
844 {
845 set(a_end_location, val);
846 }
847
848 inline void ellipsis(bool val)
849 {
850 set(a_ellipsis, val);
851 }
852
853 inline void axiom(bool val)
854 {
855 set(a_axiom, val);
856 }
857
858 inline void event(const irep_idt &val)
859 {
860 set(a_event, val);
861 }
862
863 inline void failed_symbol(const irep_idt val)
864 {
865 set(a_failed_symbol, val);
866 }
867
868 inline void file(const irep_idt val)
869 {
870 set(a_file, val);
871 }
872
873 inline void file_local(bool val)
874 {
875 set(a_file_local, val);
876 }
877
878 inline void guard(const irept &val)
879 {
880 set(a_guard, val);
881 }
882
883 inline void hide(bool val)
884 {
885 set(a_hide, val);
886 }
887
888 inline void id_class(unsigned int val)
889 {
890 set(a_id_class, val);
891 }
892
893 inline void cmt_identifier(const irep_idt val)
894 {
895 set(a_cmt_identifier, val);
896 }
897
898 inline void implicit(bool val)
899 {
900 set(a_implicit, val);
901 }
902
903 inline void incomplete(bool val)
904 {
905 set(a_incomplete, val);
906 }
907
908 inline void inlined(bool val)
909 {
910 set(a_inlined, val);
911 }
912
913 inline void invalid_object(bool val)
914 {
915 set(a_invalid_object, val);
916 }
917
918 inline void is_parameter(bool val)
919 {
920 set(a_is_parameter, val);
921 }
922
923 inline void is_expression(bool val)
924 {
925 set(a_is_expression, val);
926 }
927
928 inline void is_extern(bool val)
929 {
930 set(a_is_extern, val);
931 }
932
933 inline void is_macro(bool val)
934 {
935 set(a_is_macro, val);
936 }
937
938 inline void is_thread_local(bool val)
939 {
941 }
942
943 inline void is_type(bool val)
944 {
945 set(a_is_type, val);
946 }
947
948 inline void label(const irep_idt &val)
949 {
950 set(a_label, val);
951 }
952
953 inline void lhs(bool val)
954 {
955 set(a_lhs, val);
956 }
957
958 inline void line(const irep_idt &val)
959 {
960 set(a_line, val);
961 }
962
963 inline void line(unsigned int val)
964 {
965 set(a_line, val);
966 }
967
968 inline void location(const irept &val)
969 {
970 set(a_location, val);
971 }
972
973 inline void lvalue(bool val)
974 {
975 set(a_lvalue, val);
976 }
977
978 inline void mode(const irep_idt &val)
979 {
980 set(a_mode, val);
981 }
982
983 inline void module(const irep_idt &val)
984 {
985 set(a_module, val);
986 }
987
988 inline void object_type(const irept &val)
989 {
990 set(a_object_type, val);
991 }
992
993 inline void pretty_name(const irep_idt &val)
994 {
995 set(a_pretty_name, val);
996 }
997
998 inline void derived_this_arg(const irep_idt &val)
999 {
1000 set(a_derived_this_arg, val);
1001 }
1002
1003 inline void base_ctor_derived(bool val)
1004 {
1006 }
1007
1008 inline void need_vptr_init(bool val)
1009 {
1010 set(a_need_vptr_init, val);
1011 }
1012
1013 inline void restricted(bool val)
1014 {
1015 set(a_restricted, val);
1016 }
1017
1018 inline void cmt_size(const irept &val)
1019 {
1020 set(a_cmt_size, val);
1021 }
1022
1023 inline void static_lifetime(bool val)
1024 {
1025 set(a_static_lifetime, val);
1026 }
1027
1028 inline void tag(const irep_idt &val)
1029 {
1030 set(a_tag, val);
1031 }
1032
1033 inline void theorem(bool val)
1034 {
1035 set(a_theorem, val);
1036 }
1037
1038 inline void cmt_type(const irept &val)
1039 {
1040 set(a_cmt_type, val);
1041 }
1042
1043 inline void type_id(unsigned int val)
1044 {
1045 set(a_type_id, val);
1046 }
1047
1048 inline void cmt_volatile(bool val)
1049 {
1050 set(a_cmt_volatile, val);
1051 }
1052
1053 inline void zero_initializer(bool val)
1054 {
1055 set(a_zero_initializer, val);
1056 }
1057
1058 inline void components(const irept &val)
1059 {
1060 set(s_components, val);
1061 }
1062
1063 inline void offsetof_type(const irept &val)
1064 {
1065 set(s_offsetof_type, val);
1066 }
1067
1068 inline void declaration_type(const irept &val)
1069 {
1070 set(s_declaration_type, val);
1071 }
1072
1073 inline void bv(const irept &val)
1074 {
1075 set(s_bv, val);
1076 }
1077
1078 inline void initializer(const irept &val)
1079 {
1080 set(s_initializer, val);
1081 }
1082
1083 inline void labels(const irept &val)
1084 {
1085 set(s_labels, val);
1086 }
1087
1088 inline void symvalue(const irept &val)
1089 {
1090 set(s_symvalue, val);
1091 }
1092
1093 inline void member_irep(const irept &val)
1094 {
1095 set(s_member, val);
1096 }
1097
1098 inline void return_type(const irept &val)
1099 {
1100 set(s_return_type, val);
1101 }
1102
1103 inline void variables(const irept &val)
1104 {
1105 set(s_variables, val);
1106 }
1107
1108 inline void targets(const irept &val)
1109 {
1110 set(s_targets, val);
1111 }
1112
1113 inline bool is_address_of() const
1114 {
1115 return id() == id_address_of;
1116 }
1117 inline bool is_and() const
1118 {
1119 return id() == id_and;
1120 }
1121 inline bool is_or() const
1122 {
1123 return id() == id_or;
1124 }
1125 inline bool is_array() const
1126 {
1127 return id() == id_array;
1128 }
1129 inline bool is_bool() const
1130 {
1131 return id() == id_bool;
1132 }
1133 inline bool is_code() const
1134 {
1135 return id() == id_code;
1136 }
1137 inline bool is_function_call() const
1138 {
1139 return is_code() && statement() == "function_call";
1140 }
1141 inline bool is_constant() const
1142 {
1143 return id() == id_constant;
1144 }
1145 inline bool is_dereference() const
1146 {
1147 return id() == id_dereference;
1148 }
1149 inline bool is_empty() const
1150 {
1151 return id() == id_empty;
1152 }
1153 inline bool is_fixedbv() const
1154 {
1155 return id() == id_fixedbv;
1156 }
1157 inline bool is_floatbv() const
1158 {
1159 return id() == id_floatbv;
1160 }
1161 inline bool is_incomplete_array() const
1162 {
1163 return id() == id_incomplete_array;
1164 }
1165 inline bool is_index() const
1166 {
1167 return id() == id_index;
1168 }
1169 inline bool is_member() const
1170 {
1171 return id() == id_member;
1172 }
1173 inline bool is_not() const
1174 {
1175 return id() == id_not;
1176 }
1177 inline bool is_notequal() const
1178 {
1179 return id() == id_notequal;
1180 }
1181 inline bool is_pointer() const
1182 {
1183 return id() == id_pointer;
1184 }
1185 inline bool is_signedbv() const
1186 {
1187 return id() == id_signedbv;
1188 }
1189 inline bool is_struct() const
1190 {
1191 return id() == id_struct;
1192 }
1193 inline bool is_symbol() const
1194 {
1195 return id() == id_symbol;
1196 }
1197 inline bool is_typecast() const
1198 {
1199 return id() == id_typecast;
1200 }
1201 inline bool is_union() const
1202 {
1203 return id() == id_union;
1204 }
1205 inline bool is_unsignedbv() const
1206 {
1207 return id() == id_unsignedbv;
1208 }
1209 inline bool is_vector() const
1210 {
1211 return id() == id_vector;
1212 }
1213 friend bool operator==(const irept &i1, const irept &i2);
1214
1215 friend inline bool operator!=(const irept &i1, const irept &i2)
1216 {
1217 return !(i1 == i2);
1218 }
1219
1220 friend std::ostream &operator<<(std::ostream &out, const irept &irep);
1221
1222 std::string to_string() const;
1223
1224 void swap(irept &irep)
1225 {
1226 std::swap(irep.data, data);
1227 }
1228
1229 friend bool operator<(const irept &i1, const irept &i2);
1230 friend bool ordering(const irept &i1, const irept &i2);
1231
1232 int compare(const irept &i) const;
1233
1234 void clear();
1235
1237 {
1238 clear();
1239 id("nil");
1240 }
1241
1243 {
1244 return write().sub;
1245 } // DANGEROUS
1246 const subt &get_sub() const
1247 {
1248 return read().sub;
1249 }
1251 {
1252 return write().named_sub;
1253 } // DANGEROUS
1255 {
1256 return read().named_sub;
1257 }
1259 {
1260 return write().comments;
1261 } // DANGEROUS
1263 {
1264 return read().comments;
1265 }
1266
1267 size_t hash() const;
1268 size_t full_hash() const;
1269
1270 friend bool full_eq(const irept &a, const irept &b);
1271
1272 std::string pretty(unsigned indent = 0) const;
1273
1274protected:
1275 static bool is_comment(const irep_idt &name)
1276 {
1277 return !name.empty() && name[0] == '#';
1278 }
1279
1280public:
1302 static const irep_idt a_is_type;
1309 static const irep_idt a_cmt_type;
1310 // annotation for typecasting derived class `this` to base class type
1312 /*
1313 * annotation to indicate whether virtual pointer(vptr) has been initialized
1314 * in contrustor This is used by implicit IR generation in adjuster
1315 */
1317
1325
1326 class dt
1327 {
1328 public:
1329#ifdef SHARING
1330 unsigned ref_count;
1331 mutable std::mutex dt_mutex;
1332#endif
1333
1335
1339
1340 void clear()
1341 {
1342 data.clear();
1343 sub.clear();
1344 named_sub.clear();
1345 comments.clear();
1346 }
1347
1348 void swap(dt &d)
1349 {
1350 d.data.swap(data);
1351 d.sub.swap(sub);
1352 d.named_sub.swap(named_sub);
1353 d.comments.swap(comments);
1354 }
1355
1356#ifdef SHARING
1358 {
1359 }
1361 : ref_count(1),
1362 data(other.data),
1365 sub(other.sub)
1366 {
1367 }
1368#else
1369 dt()
1370 {
1371 }
1372#endif
1373 };
1374
1375protected:
1376#ifdef SHARING
1378
1379 void remove_ref(dt *old_data);
1380
1381 const dt &read() const;
1382
1383 inline dt &write()
1384 {
1385 detatch();
1386 return *data;
1387 }
1388
1389 void detatch();
1390#else
1391 dt data;
1392
1393 inline const dt &read() const
1394 {
1395 return data;
1396 }
1397
1398 inline dt &write()
1399 {
1400 return data;
1401 }
1402#endif
1403};
1404
1405extern inline const std::string &id2string(const irep_idt &d)
1406{
1407 return d.as_string();
1408}
1409
1410extern inline const std::string &name2string(const irep_idt &n)
1411{
1412 return n.as_string();
1413}
1414
1416{
1417 size_t operator()(const irept &irep) const
1418 {
1419 return irep.hash();
1420 }
1421 bool operator()(const irept &i1, const irept &i2) const
1422 {
1423 return i1.hash() < i2.hash();
1424 }
1425};
1426
1428{
1429 size_t operator()(const irept &irep) const
1430 {
1431 return irep.full_hash();
1432 }
1433};
1434
1436{
1437 bool operator()(const irept &i1, const irept &i2) const
1438 {
1439 return full_eq(i1, i2);
1440 }
1441};
1442
1443const irept &get_nil_irep();
1444
1445#endif
Definition irep_idt.h:12
const std::string & as_string() const
Definition irep_idt.h:138
void swap(irep_idt &b)
Definition irep_idt.h:150
Definition irep.h:1327
dt()
Definition irep.h:1357
irep_idt data
Definition irep.h:1334
std::mutex dt_mutex
Definition irep.h:1331
void swap(dt &d)
Definition irep.h:1348
subt sub
Definition irep.h:1338
void clear()
Definition irep.h:1340
dt(const irept::dt &other)
Definition irep.h:1360
unsigned ref_count
Definition irep.h:1330
named_subt comments
Definition irep.h:1337
named_subt named_sub
Definition irep.h:1336
Definition irep.h:36
static const irep_idt a_restricted
Definition irep.h:1305
bool restricted() const
Definition irep.h:623
static const irep_idt a_object_type
Definition irep.h:1308
bool get_bool(const irep_idt &name) const
Definition irep.cpp:142
void need_vptr_init(bool val)
Definition irep.h:1008
void bv(const irept &val)
Definition irep.h:1073
bool cmt_unsigned() const
Definition irep.h:638
void cmt_size(const irept &val)
Definition irep.h:1018
const irept & declaration_type() const
Definition irep.h:412
static const irep_idt a_event
Definition irep.h:1290
const irept & symvalue() const
Definition irep.h:427
bool is_member() const
Definition irep.h:1169
void remove_ref(dt *old_data)
const irep_idt & cmt_width() const
Definition irep.h:508
static const irep_idt a_mode
Definition irep.h:1291
const irep_idt & statement() const
Definition irep.h:177
bool implicit() const
Definition irep.h:558
bool is_pointer() const
Definition irep.h:1181
static const irep_idt id_address_of
Definition irep.h:1318
const irept & function_irep() const
Definition irep.h:217
bool is_array() const
Definition irep.h:1125
const irep_idt & id_class() const
Definition irep.h:468
void labels(const irept &val)
Definition irep.h:1083
dt & write()
Definition irep.h:1383
const irep_idt & cmt_base_name() const
Definition irep.h:463
static const irep_idt a_base_ctor_derived
Definition irep.h:1311
static const irep_idt a_inlined
Definition irep.h:1299
const irept & size_irep() const
Definition irep.h:307
bool is_vector() const
Definition irep.h:1209
bool is_floatbv() const
Definition irep.h:1157
void destination(const irep_idt val)
Definition irep.h:793
void is_expression(bool val)
Definition irep.h:923
void move_to_named_sub(const irep_idt &name, irept &irep)
Definition irep.cpp:109
static const irep_idt a_statement
Definition irep.h:1287
static const irep_idt a_integer_bits
Definition irep.h:1292
static const irep_idt s_bv
Definition irep.h:1283
bool is_notequal() const
Definition irep.h:1177
const irep_idt & literal() const
Definition irep.h:257
static const irep_idt a_cformat
Definition irep.h:1294
const irep_idt & mode() const
Definition irep.h:267
void component_name(const irep_idt name)
Definition irep.h:683
static const irep_idt id_not
Definition irep.h:1322
static const irep_idt a_cmt_type
Definition irep.h:1309
static const irep_idt a_line
Definition irep.h:1288
void is_macro(bool val)
Definition irep.h:933
void type_id(unsigned int val)
Definition irep.h:1043
void line(unsigned int val)
Definition irep.h:963
bool is_type() const
Definition irep.h:608
const irep_idt & type_id() const
Definition irep.h:327
bool user_provided() const
Definition irep.h:643
void decl_ident(const irept &val)
Definition irep.h:663
void incomplete(bool val)
Definition irep.h:903
static const irep_idt s_return_type
Definition irep.h:1282
const subt & get_sub() const
Definition irep.h:1246
void member_name(const irep_idt val)
Definition irep.h:748
const irept & variables() const
Definition irep.h:377
void cmt_width(unsigned int width)
Definition irep.h:703
irept()
Definition irep.h:58
const irept & find(const irep_idt &name) const
Definition irep.cpp:167
static const irep_idt a_hide
Definition irep.h:1298
friend bool operator==(const irept &i1, const irept &i2)
Definition irep.cpp:186
static const irep_idt a_name
Definition irep.h:1287
const irep_idt & pretty_name() const
Definition irep.h:277
static const irep_idt a_cmt_active
Definition irep.h:1306
static const irep_idt a_width
Definition irep.h:1287
friend bool operator!=(const irept &i1, const irept &i2)
Definition irep.h:1215
void dfault(bool val)
Definition irep.h:833
bool is_function_call() const
Definition irep.h:1137
const irep_idt & identifier() const
Definition irep.h:167
void file_local(bool val)
Definition irep.h:873
void dump() const
Definition irep.cpp:13
named_subt & get_comments()
Definition irep.h:1258
void comment(const irep_idt cmt)
Definition irep.h:678
bool is_incomplete_array() const
Definition irep.h:1161
static const irep_idt a_destination
Definition irep.h:1289
void cmt_type(const irept &val)
Definition irep.h:1038
static const irep_idt id_index
Definition irep.h:1321
const irep_idt & function() const
Definition irep.h:212
static const irep_idt a_flavor
Definition irep.h:1305
void size(const irept &val)
Definition irep.h:778
static const irep_idt id_floatbv
Definition irep.h:1321
void cformat(const irep_idt val)
Definition irep.h:743
const irep_idt & get(const irep_idt &name) const
Definition irep.cpp:127
void end_location(const irept &val)
Definition irep.h:843
bool ellipsis() const
Definition irep.h:533
const irep_idt & file() const
Definition irep.h:202
static const irep_idt a_file_local
Definition irep.h:1297
static const irep_idt s_targets
Definition irep.h:1283
static const irep_idt a_column
Definition irep.h:1288
static const irep_idt id_vector
Definition irep.h:1324
static const irep_idt id_unsignedbv
Definition irep.h:1324
static const irep_idt a_is_thread_local
Definition irep.h:1301
static const irep_idt a_member_name
Definition irep.h:1295
static const irep_idt a_zero_initializer
Definition irep.h:1305
std::string to_string() const
Definition irep.cpp:258
static const irep_idt a_static_lifetime
Definition irep.h:1303
void flavor(const irep_idt val)
Definition irep.h:763
irept(const irep_idt &_id)
Definition irep.cpp:31
void cpp_type(const irep_idt val)
Definition irep.h:753
static const irep_idt a_pretty_name
Definition irep.h:1292
bool explict() const
Definition irep.h:538
size_t full_hash() const
Definition irep.cpp:399
static const irep_idt a_user_provided
Definition irep.h:1304
const irept & decl_ident() const
Definition irep.h:437
void is_thread_local(bool val)
Definition irep.h:938
void cmt_unsigned(const irep_idt val)
Definition irep.h:718
static const irep_idt s_arguments
Definition irep.h:1281
void inlined(bool val)
Definition irep.h:908
std::string pretty(unsigned indent=0) const
Definition irep.cpp:427
const irep_idt & base_name() const
Definition irep.h:237
static const irep_idt a_is_extern
Definition irep.h:1301
bool base_ctor_derived() const
Definition irep.h:287
void implicit(bool val)
Definition irep.h:898
bool is_thread_local() const
Definition irep.h:603
static const irep_idt a_identifier
Definition irep.h:1287
void pretty_name(const irep_idt &val)
Definition irep.h:993
static const irep_idt id_notequal
Definition irep.h:1322
const irep_idt & column() const
Definition irep.h:222
void name(const irep_idt val)
Definition irep.h:738
void remove(const irep_idt &name)
Definition irep.cpp:152
static const irep_idt a_guard
Definition irep.h:1307
bool hide() const
Definition irep.h:553
static const irep_idt s_decl_value
Definition irep.h:1284
static const irep_idt id_pointer
Definition irep.h:1322
static const irep_idt id_empty
Definition irep.h:1320
void is_parameter(bool val)
Definition irep.h:918
const irep_idt & event() const
Definition irep.h:247
static const irep_idt a_invalid_object
Definition irep.h:1299
static const irep_idt a_dynamic
Definition irep.h:1293
bool is_constant() const
Definition irep.h:1141
friend bool operator<(const irept &i1, const irept &i2)
Definition irep.cpp:378
bool initialization() const
Definition irep.h:568
bool is_symbol() const
Definition irep.h:1193
void width(const irep_idt width)
Definition irep.h:708
const irep_idt & property() const
Definition irep.h:297
const irep_idt & member_name() const
Owning class tag of a member function type, e.g.
Definition irep.h:489
void ellipsis(bool val)
Definition irep.h:848
static const irep_idt a_literal
Definition irep.h:1291
bool dfault() const
Definition irep.h:528
void set(const irep_idt &name, const irep_idt &value)
Definition irep.h:141
static const irep_idt s_declaration_type
Definition irep.h:1284
irept(const irept &irep)
Definition irep.h:62
const irept & end_location() const
Definition irep.h:422
static const irep_idt a_cmt_base_name
Definition irep.h:1293
void cmt_active(const irep_idt val)
Definition irep.h:808
static const irep_idt s_offsetof_type
Definition irep.h:1286
bool is_code() const
Definition irep.h:1133
static const irep_idt a_component
Definition irep.h:1306
friend bool ordering(const irept &i1, const irept &i2)
Definition irep.cpp:269
void width(unsigned int width)
Definition irep.h:713
static const irep_idt a_cmt
Definition irep.h:1308
int compare(const irept &i) const
Definition irep.cpp:322
static const irep_idt id_bool
Definition irep.h:1318
static const irep_idt a_property
Definition irep.h:1292
static const irep_idt s_body
Definition irep.h:1282
static const irep_idt id_or
Definition irep.h:1318
const irep_idt & width() const
Definition irep.h:172
static const irep_idt a_code
Definition irep.h:1306
static const irep_idt id_signedbv
Definition irep.h:1322
void clear()
Definition irep.cpp:99
bool is_and() const
Definition irep.h:1117
void is_extern(bool val)
Definition irep.h:928
void failed_symbol(const irep_idt val)
Definition irep.h:863
const irept & elements() const
Definition irep.h:447
bool lvalue() const
Definition irep.h:613
static const irep_idt id_dereference
Definition irep.h:1320
static const irep_idt a_hex_or_oct
Definition irep.h:1298
bool is_decl_ident_set() const
Definition irep.h:442
bool is_dereference() const
Definition irep.h:1145
bool is_or() const
Definition irep.h:1121
void arguments(const irept &val)
Definition irep.h:658
bool file_local() const
Definition irep.h:543
bool is_dynamic_set() const
Definition irep.h:452
bool is_not_nil() const
Definition irep.h:50
void cmt_width(const irep_idt width)
Definition irep.h:698
const irept & guard() const
Definition irep.h:402
std::map< irep_idt, irept > named_subt
Definition irep.h:41
const named_subt & get_named_sub() const
Definition irep.h:1254
const irep_idt & module() const
Definition irep.h:272
void cmt_unsigned(bool val)
Definition irep.h:723
const irep_idt & size() const
Definition irep.h:302
void component(const irep_idt val)
Definition irep.h:823
static const irep_idt a_derived_this_arg
Definition irep.h:1311
static const irep_idt a_theorem
Definition irep.h:1303
static const irep_idt a_is_type
Definition irep.h:1302
static const irep_idt a_comp_name
Definition irep.h:1287
static const irep_idt id_fixedbv
Definition irep.h:1320
bool hex_or_oct() const
Definition irep.h:548
const irep_idt & access() const
Definition irep.h:232
void declaration_type(const irept &val)
Definition irep.h:1068
const irep_idt & tag() const
Definition irep.h:192
const std::string & id_string() const
Definition irep.h:114
static const irep_idt a_loopid
Definition irep.h:1291
bool is_struct() const
Definition irep.h:1189
bool is_parameter() const
Definition irep.h:583
static const irep_idt a_cmt_width
Definition irep.h:1294
static const irep_idt id_code
Definition irep.h:1319
static const irep_idt a_initialization
Definition irep.h:1299
static const irep_idt a_failed_symbol
Definition irep.h:1293
bool is_unsignedbv() const
Definition irep.h:1205
static const irep_idt s_elements
Definition irep.h:1286
static const irep_idt id_incomplete_array
Definition irep.h:1321
const irept & initializer() const
Definition irep.h:387
void cmt_constant(bool val)
Definition irep.h:803
static const irep_idt s_member
Definition irep.h:1282
bool cmt_volatile() const
Definition irep.h:648
static const irep_idt s_decl_ident
Definition irep.h:1285
const dt & read() const
const irept & return_type() const
Definition irep.h:347
const irept & code() const
Definition irep.h:397
const irep_idt & cmt_identifier() const
Definition irep.h:473
std::vector< irept > subt
Definition irep.h:38
static const irep_idt s_symvalue
Definition irep.h:1285
static const irep_idt a_lvalue
Definition irep.h:1303
void initializer(const irept &val)
Definition irep.h:1078
void restricted(bool val)
Definition irep.h:1013
static const irep_idt a_function
Definition irep.h:1288
static const irep_idt a_lhs
Definition irep.h:1307
const irep_idt & to() const
Definition irep.h:317
void lhs(bool val)
Definition irep.h:953
static const irep_idt id_constant
Definition irep.h:1320
void targets(const irept &val)
Definition irep.h:1108
void dynamic(bool val)
Definition irep.h:838
const irept & components() const
Definition irep.h:337
void component(unsigned int val)
Definition irep.h:828
void file(const irep_idt val)
Definition irep.h:868
const typet & type() const
Definition irep.h:157
size_t hash() const
Definition irep.cpp:383
bool axiom() const
Definition irep.h:518
void invalid_object(bool val)
Definition irep.h:913
void cmt_volatile(bool val)
Definition irep.h:1048
const irept & object_type() const
Definition irep.h:382
void static_lifetime(bool val)
Definition irep.h:1023
void base_name(const irep_idt val)
Definition irep.h:813
static const irep_idt a_tag
Definition irep.h:1288
void base_ctor_derived(bool val)
Definition irep.h:1003
const irept & member_irep() const
Definition irep.h:357
const irep_idt & cpp_type() const
Source-level spelling of a type, e.g.
Definition irep.h:503
subt & get_sub()
Definition irep.h:1242
irept & operator=(const irept &irep)
Definition irep.h:77
bool reference() const
Definition irep.h:618
const irep_idt & line() const
Definition irep.h:207
bool invalid_object() const
Definition irep.h:578
void detatch()
typet & type()
Definition irep.h:153
static const irep_idt a_module
Definition irep.h:1291
void line(const irep_idt &val)
Definition irep.h:958
static const irep_idt s_variables
Definition irep.h:1283
void user_provided(bool val)
Definition irep.h:788
void components(const irept &val)
Definition irep.h:1058
void location(const irept &val)
Definition irep.h:968
bool is_typecast() const
Definition irep.h:1197
bool is_fixedbv() const
Definition irep.h:1153
static const irep_idt a_axiom
Definition irep.h:1294
static const irep_idt a_label
Definition irep.h:1307
bool theorem() const
Definition irep.h:633
const irep_idt & component_name() const
Definition irep.h:187
bool is_identifier_set() const
Definition irep.h:162
bool inlined() const
Definition irep.h:573
const irep_idt & failed_symbol() const
Definition irep.h:322
const irep_idt & comment() const
Definition irep.h:242
void make_nil()
Definition irep.h:1236
friend class irep_serializationt
Definition irep.h:128
static const irep_idt a_access
Definition irep.h:1289
static const irep_idt id_and
Definition irep.h:1318
bool is_union() const
Definition irep.h:1201
bool is_bool() const
Definition irep.h:1129
void user_provided(const irep_idt val)
Definition irep.h:783
static const irep_idt a_location
Definition irep.h:1307
bool is_extern() const
Definition irep.h:593
void member_irep(const irept &val)
Definition irep.h:1093
static const irep_idt a_to
Definition irep.h:1292
const irep_idt & from() const
Definition irep.h:197
void function(const irep_idt val)
Definition irep.h:768
static const irep_idt a_size
Definition irep.h:1292
static const irep_idt s_labels
Definition irep.h:1282
static const irep_idt a_incomplete
Definition irep.h:1298
const irep_idt & loopid() const
Definition irep.h:262
const irep_idt & integer_bits() const
Definition irep.h:312
const irept & labels_irep() const
Definition irep.h:362
const irep_idt & derived_this_arg() const
Definition irep.h:282
const irept & offsetof_type() const
Definition irep.h:513
static const irep_idt a_cmt_constant
Definition irep.h:1296
void property(const irep_idt prop)
Definition irep.h:728
const irept & location() const
Definition irep.h:407
void statement(const irep_idt statm)
Definition irep.h:673
static const irep_idt a_is_expression
Definition irep.h:1300
void identifier(const irep_idt ident)
Definition irep.h:668
static const irep_idt a_implicit
Definition irep.h:1298
static const irep_idt a_cmt_volatile
Definition irep.h:1304
const irep_idt & destination() const
Definition irep.h:227
void event(const irep_idt &val)
Definition irep.h:858
const irept & decl_value() const
Definition irep.h:417
friend std::ostream & operator<<(std::ostream &out, const irept &irep)
Definition irep.cpp:263
void cmt_constant(const irep_idt val)
Definition irep.h:798
static bool is_comment(const irep_idt &name)
Definition irep.h:1275
static const irep_idt a_explicit
Definition irep.h:1297
const irept & arguments() const
Definition irep.h:332
void size(const irep_idt val)
Definition irep.h:773
static const irep_idt a_is_parameter
Definition irep.h:1300
bool is_signedbv() const
Definition irep.h:1185
bool is_expression() const
Definition irep.h:588
void offsetof_type(const irept &val)
Definition irep.h:1063
static const irep_idt a_end_location
Definition irep.h:1307
static const irep_idt a_comment
Definition irep.h:1289
void id_class(unsigned int val)
Definition irep.h:888
static const irep_idt id_symbol
Definition irep.h:1323
bool is_index() const
Definition irep.h:1165
void return_type(const irept &val)
Definition irep.h:1098
static const irep_idt id_typecast
Definition irep.h:1323
const irept & event_irep() const
Definition irep.h:252
void move_to_sub(irept &irep)
Definition irep.cpp:118
void tag(const irep_idt &val)
Definition irep.h:1028
void remove_member_name()
Definition irep.h:758
static const irep_idt a_cmt_size
Definition irep.h:1308
static const irep_idt a_reference
Definition irep.h:1303
static const irep_idt a_id_class
Definition irep.h:1293
static const irep_idt id_array
Definition irep.h:1318
void swap(irept &irep)
Definition irep.h:1224
const irept & targets() const
Definition irep.h:372
const irep_idt & id() const
Definition irep.h:109
void hex_or_oct(const irep_idt which)
Definition irep.h:688
static const irep_idt a_type_id
Definition irep.h:1308
bool is_empty() const
Definition irep.h:1149
static const irep_idt a_file
Definition irep.h:1288
static const irep_idt s_components
Definition irep.h:1281
const irept & cmt_size() const
Definition irep.h:392
static const irep_idt a_is_macro
Definition irep.h:1301
void module(const irep_idt &val)
Definition irep.h:983
static const irep_idt a_cmt_unsigned
Definition irep.h:1304
bool incomplete() const
Definition irep.h:563
void theorem(bool val)
Definition irep.h:1033
const irept & cmt_type() const
Definition irep.h:342
void derived_this_arg(const irep_idt &val)
Definition irep.h:998
static const irep_idt a_ellipsis
Definition irep.h:1297
void is_type(bool val)
Definition irep.h:943
dt * data
Definition irep.h:1377
static const irep_idt id_member
Definition irep.h:1321
bool dynamic() const
Definition irep.h:458
void axiom(bool val)
Definition irep.h:853
void variables(const irept &val)
Definition irep.h:1103
static const irep_idt a_default
Definition irep.h:1296
~irept()
Definition irep.h:98
bool is_macro() const
Definition irep.h:598
void id(const irep_idt &_data)
Definition irep.h:119
void lvalue(bool val)
Definition irep.h:973
static const irep_idt id_union
Definition irep.h:1323
void object_type(const irept &val)
Definition irep.h:988
void guard(const irept &val)
Definition irep.h:878
void hide(bool val)
Definition irep.h:883
const irept & cmt_location() const
Definition irep.h:432
bool is_address_of() const
Definition irep.h:1113
void code(const irept &val)
Definition irep.h:818
const named_subt & get_comments() const
Definition irep.h:1262
void zero_initializer(bool val)
Definition irep.h:1053
static const irep_idt a_cpp_type
Definition irep.h:1295
static const irep_idt id_struct
Definition irep.h:1323
bool zero_initializer() const
Definition irep.h:653
bool cmt_constant() const
Definition irep.h:523
const irept & bv() const
Definition irep.h:367
irept & add(const irep_idt &name)
Definition irep.cpp:179
const irept & body() const
Definition irep.h:352
void label(const irep_idt &val)
Definition irep.h:948
void hex_or_oct(bool which)
Definition irep.h:693
bool is_not() const
Definition irep.h:1173
static const irep_idt a_base_name
Definition irep.h:1289
void cmt_identifier(const irep_idt val)
Definition irep.h:893
bool need_vptr_init() const
Definition irep.h:292
const irep_idt & cformat() const
Definition irep.h:478
friend bool full_eq(const irept &a, const irept &b)
Definition irep.cpp:207
static const irep_idt s_initializer
Definition irep.h:1284
void symvalue(const irept &val)
Definition irep.h:1088
void cmt_base_name(const irep_idt name)
Definition irep.h:733
static const irep_idt a_need_vptr_init
Definition irep.h:1316
bool is_nil() const
Definition irep.h:46
void mode(const irep_idt &val)
Definition irep.h:978
static const irep_idt s_cmt_location
Definition irep.h:1285
static const irep_idt a_cmt_identifier
Definition irep.h:1294
const irep_idt & name() const
Definition irep.h:182
static const irep_idt s_type
Definition irep.h:1281
static const irep_idt a_from
Definition irep.h:1288
named_subt & get_named_sub()
Definition irep.h:1250
bool static_lifetime() const
Definition irep.h:628
const std::string & get_string(const irep_idt &name) const
Definition irep.h:133
Definition type.h:9
Definition toml.hpp:1531
@ other
Definition converter_compare.cpp:887
bool full_eq(const irept &i1, const irept &i2)
Definition irep.cpp:207
const irept & get_nil_irep()
Definition irep.cpp:18
const std::string & name2string(const irep_idt &n)
Definition irep.h:1410
const std::string & id2string(const irep_idt &d)
Definition irep.h:1405
std::hash< irep_idt > irep_id_hash
Definition irep.h:15
Definition irep.h:1436
bool operator()(const irept &i1, const irept &i2) const
Definition irep.h:1437
Definition irep.h:1428
size_t operator()(const irept &irep) const
Definition irep.h:1429
Definition irep.h:1416
bool operator()(const irept &i1, const irept &i2) const
Definition irep.h:1421
size_t operator()(const irept &irep) const
Definition irep.h:1417