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 | with Ada.Containers.Indefinite_Vectors;
with Patchers; use Patchers;
with Predefined_Rewriters_Append; use Predefined_Rewriters_Append;
with Predefined_Rewriters_Block_Statement_Simplify;
use Predefined_Rewriters_Block_Statement_Simplify;
with Predefined_Rewriters_Boolean_Expression_De_Morgan;
use Predefined_Rewriters_Boolean_Expression_De_Morgan;
with Predefined_Rewriters_Boolean_Expression_Simplify;
use Predefined_Rewriters_Boolean_Expression_Simplify;
with Predefined_Rewriters_Declaration_Simplify;
use Predefined_Rewriters_Declaration_Simplify;
with Predefined_Rewriters_If_Expression_Distribution;
use Predefined_Rewriters_If_Expression_Distribution;
with Predefined_Rewriters_If_Expression_Simplify;
use Predefined_Rewriters_If_Expression_Simplify;
with Predefined_Rewriters_Membership_Test;
use Predefined_Rewriters_Membership_Test;
with Predefined_Rewriters_Minimal_Parentheses;
use Predefined_Rewriters_Minimal_Parentheses;
with Predefined_Rewriters_Not; use Predefined_Rewriters_Not;
with Predefined_Rewriters_Prefer_If_Expression;
use Predefined_Rewriters_Prefer_If_Expression;
with Predefined_Rewriters_Prefer_Short_Circuit;
use Predefined_Rewriters_Prefer_Short_Circuit;
with Predefined_Rewriters_Prefer_Quantified_Expressions;
use Predefined_Rewriters_Prefer_Quantified_Expressions;
with Predefined_Rewriters_Representation_Clauses;
use Predefined_Rewriters_Representation_Clauses;
with Post_Processing_Contexts_Function_Access;
use Post_Processing_Contexts_Function_Access;
with Rewriters_Sequence; use Rewriters_Sequence;
with Rewriters_Vectors; use Rewriters_Vectors;
package Predefined_Patchers is
Patcher_Append : aliased constant Patcher :=
Make_Patcher
("Append",
Make_Post_Processing_Context_Function_Access
(Append_Rewrite_Context'Access),
Rewriter_Append,
Make_Rewriter_Sequence (Rewriter_Not & Rewriter_Minimal_Parentheses));
Patcher_De_Morgan : aliased constant Patcher :=
Make_Patcher
("De_Morgan",
Make_Post_Processing_Context_Function_Access
(De_Morgan_Rewrite_Context'Access),
Rewrite_De_Morgan,
Make_Rewriter_Sequence (Rewriter_Not & Rewriter_Minimal_Parentheses));
Patcher_Declarations_Combine : aliased constant Patcher :=
Make_Patcher
("Declarations_Combine",
Make_Post_Processing_Context_Function_Access
(Declarations_Combine_Rewrite_Context'Access),
Rewriter_Declarations_Combine);
Patcher_Declare_And_Overwrite : aliased constant Patcher :=
Make_Patcher
("Declare_And_Overwrite", Rewriter_Declare_And_Overwrite,
Make_Rewriter_Sequence
(Rewriter_If_Expression_Distribution &
Rewriter_If_Expression_Simplify & Rewriter_Not &
Rewriter_Minimal_Parentheses));
Patcher_If_Expression : aliased constant Patcher :=
Make_Patcher
("If_Expression",
Make_Post_Processing_Context_Function_Access
(If_Expression_Rewrite_Context'Access),
Rewriter_If_Expression,
Make_Rewriter_Sequence
(Rewriter_If_Expression_Distribution &
Rewriter_If_Expression_Simplify & Rewriter_Not &
Rewriter_Minimal_Parentheses));
Patcher_Membership_Test : aliased constant Patcher :=
Make_Patcher
("Membership_Test",
Make_Post_Processing_Context_Function_Access
(Membership_Rewrite_Context'Access),
Rewriter_Membership_Test);
Patcher_Short_Circuit : aliased constant Patcher :=
Make_Patcher
("Short_Circuit",
Make_Post_Processing_Context_Function_Access
(Prefer_Short_Circuit_Rewrite_Context'Access),
Rewriter_Prefer_Short_Circuit);
Patcher_Quantified_Expressions : aliased constant Patcher :=
Make_Patcher
("Quantified_Expressions",
Make_Post_Processing_Context_Function_Access
(Quantified_Expressions_Rewrite_Context'Access),
Rewriter_Quantified_Expressions,
Make_Rewriter_Sequence (Rewriter_Not & Rewriter_Minimal_Parentheses));
Patcher_Representation_Clauses : aliased constant Patcher :=
Make_Patcher
("Representation_Clauses",
Make_Post_Processing_Context_Function_Access
(Representation_Clauses_Rewrite_Context'Access),
Rewriter_Representation_Clauses);
Patcher_Boolean_Expression_Simplify : aliased constant Patcher :=
Make_Patcher
("Boolean_Expression_Simplify",
Make_Post_Processing_Context_Function_Access
(Boolean_Expression_Simplify_Rewrite_Context'Access),
Rewriter_Boolean_Expression_Simplify);
--------------------------------------------------------------------------
package Patchers_Vectors is new Ada.Containers.Indefinite_Vectors
(Positive, Patcher'Class);
use Patchers_Vectors;
Patchers_Predefined : constant Patchers_Vectors.Vector :=
Patcher_Append & Patcher_De_Morgan & Patcher_Declarations_Combine &
Patcher_Declare_And_Overwrite & Patcher_If_Expression &
Patcher_Membership_Test & Patcher_Short_Circuit &
Patcher_Quantified_Expressions & Patcher_Representation_Clauses &
Patcher_Boolean_Expression_Simplify;
end Predefined_Patchers;
|