rewriters_23.0.0_736dbf04/src/predefined_patchers.ads

  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;