GCC Code Coverage Report
Directory: . Exec Total Coverage
File: build-coverage/src/options/strings_options.cpp Lines: 1 97 1.0 %
Date: 2021-09-15 Branches: 2 101 2.0 %

Line Exec Source
1
/******************************************************************************
2
 * Top contributors (to current version):
3
 *   Mathias Preiner, Aina Niemetz
4
 *
5
 * This file is part of the cvc5 project.
6
 *
7
 * Copyright (c) 2009-2021 by the authors listed in the file AUTHORS
8
 * in the top-level source directory and their institutional affiliations.
9
 * All rights reserved.  See the file COPYING in the top-level source
10
 * directory for licensing information.
11
 * ****************************************************************************
12
 *
13
 * Option template for option modules.
14
 *
15
 * For each <module>_options.toml configuration file, mkoptions.py
16
 * expands this template and generates a <module>_options.cpp file.
17
 */
18
#include "options/strings_options.h"
19
20
#include <iostream>
21
22
#include "base/check.h"
23
#include "options/option_exception.h"
24
25
namespace cvc5::options {
26
27
// clang-format off
28
std::ostream& operator<<(std::ostream& os, RegExpInterMode mode)
29
{
30
  switch(mode)
31
  {
32
    case RegExpInterMode::ALL: return os << "RegExpInterMode::ALL";
33
    case RegExpInterMode::NONE: return os << "RegExpInterMode::NONE";
34
    case RegExpInterMode::CONSTANT: return os << "RegExpInterMode::CONSTANT";
35
    case RegExpInterMode::ONE_CONSTANT: return os << "RegExpInterMode::ONE_CONSTANT";
36
    default: Unreachable();
37
  }
38
  return os;
39
}
40
RegExpInterMode stringToRegExpInterMode(const std::string& optarg)
41
{
42
  if (optarg == "all") return RegExpInterMode::ALL;
43
  else if (optarg == "none") return RegExpInterMode::NONE;
44
  else if (optarg == "constant") return RegExpInterMode::CONSTANT;
45
  else if (optarg == "one-constant") return RegExpInterMode::ONE_CONSTANT;
46
  else if (optarg == "help")
47
  {
48
    std::cerr << R"FOOBAR(
49
  Regular expression intersection modes.
50
Available modes for --re-inter-mode are:
51
+ all
52
  Compute intersections for all regular expressions.
53
+ none
54
  Do not compute intersections for regular expressions.
55
+ constant (default)
56
  Compute intersections only between regular expressions that do not contain
57
  re.allchar or re.range.
58
+ one-constant
59
  Compute intersections only between regular expressions such that at least one
60
  side does not contain re.allchar or re.range.
61
)FOOBAR";
62
    std::exit(1);
63
  }
64
  throw OptionException(std::string("unknown option for --re-inter-mode: `") +
65
                        optarg + "'.  Try --re-inter-mode=help.");
66
}
67
std::ostream& operator<<(std::ostream& os, ProcessLoopMode mode)
68
{
69
  switch(mode)
70
  {
71
    case ProcessLoopMode::SIMPLE_ABORT: return os << "ProcessLoopMode::SIMPLE_ABORT";
72
    case ProcessLoopMode::NONE: return os << "ProcessLoopMode::NONE";
73
    case ProcessLoopMode::FULL: return os << "ProcessLoopMode::FULL";
74
    case ProcessLoopMode::ABORT: return os << "ProcessLoopMode::ABORT";
75
    case ProcessLoopMode::SIMPLE: return os << "ProcessLoopMode::SIMPLE";
76
    default: Unreachable();
77
  }
78
  return os;
79
}
80
ProcessLoopMode stringToProcessLoopMode(const std::string& optarg)
81
{
82
  if (optarg == "simple-abort") return ProcessLoopMode::SIMPLE_ABORT;
83
  else if (optarg == "none") return ProcessLoopMode::NONE;
84
  else if (optarg == "full") return ProcessLoopMode::FULL;
85
  else if (optarg == "abort") return ProcessLoopMode::ABORT;
86
  else if (optarg == "simple") return ProcessLoopMode::SIMPLE;
87
  else if (optarg == "help")
88
  {
89
    std::cerr << R"FOOBAR(
90
  Loop processing modes.
91
Available modes for --strings-process-loop-mode are:
92
+ simple-abort
93
  Abort when normal loop breaking is required.
94
+ none
95
  Omit loop processing.
96
+ full (default)
97
  Perform full processing of looping word equations.
98
+ abort
99
  Abort if looping word equations are encountered.
100
+ simple
101
  Omit normal loop breaking (default with --strings-fmf).
102
)FOOBAR";
103
    std::exit(1);
104
  }
105
  throw OptionException(std::string("unknown option for --strings-process-loop-mode: `") +
106
                        optarg + "'.  Try --strings-process-loop-mode=help.");
107
}
108
// clang-format on
109
110
namespace strings
111
{
112
// clang-format off
113
void setDefaultRegExpElim(Options& opts, bool value)
114
{
115
    if (!opts.strings.regExpElimWasSetByUser) opts.strings.regExpElim = value;
116
}
117
void setDefaultRegExpElimAgg(Options& opts, bool value)
118
{
119
    if (!opts.strings.regExpElimAggWasSetByUser) opts.strings.regExpElimAgg = value;
120
}
121
void setDefaultStringRegExpInterMode(Options& opts, RegExpInterMode value)
122
{
123
    if (!opts.strings.stringRegExpInterModeWasSetByUser) opts.strings.stringRegExpInterMode = value;
124
}
125
void setDefaultStringCheckEntailLen(Options& opts, bool value)
126
{
127
    if (!opts.strings.stringCheckEntailLenWasSetByUser) opts.strings.stringCheckEntailLen = value;
128
}
129
void setDefaultStringEager(Options& opts, bool value)
130
{
131
    if (!opts.strings.stringEagerWasSetByUser) opts.strings.stringEager = value;
132
}
133
void setDefaultStringEagerEval(Options& opts, bool value)
134
{
135
    if (!opts.strings.stringEagerEvalWasSetByUser) opts.strings.stringEagerEval = value;
136
}
137
void setDefaultStringEagerLen(Options& opts, bool value)
138
{
139
    if (!opts.strings.stringEagerLenWasSetByUser) opts.strings.stringEagerLen = value;
140
}
141
void setDefaultStringExp(Options& opts, bool value)
142
{
143
    if (!opts.strings.stringExpWasSetByUser) opts.strings.stringExp = value;
144
}
145
void setDefaultStringFlatForms(Options& opts, bool value)
146
{
147
    if (!opts.strings.stringFlatFormsWasSetByUser) opts.strings.stringFlatForms = value;
148
}
149
void setDefaultStringFMF(Options& opts, bool value)
150
{
151
    if (!opts.strings.stringFMFWasSetByUser) opts.strings.stringFMF = value;
152
}
153
void setDefaultStringGuessModel(Options& opts, bool value)
154
{
155
    if (!opts.strings.stringGuessModelWasSetByUser) opts.strings.stringGuessModel = value;
156
}
157
void setDefaultStringInferAsLemmas(Options& opts, bool value)
158
{
159
    if (!opts.strings.stringInferAsLemmasWasSetByUser) opts.strings.stringInferAsLemmas = value;
160
}
161
void setDefaultStringInferSym(Options& opts, bool value)
162
{
163
    if (!opts.strings.stringInferSymWasSetByUser) opts.strings.stringInferSym = value;
164
}
165
void setDefaultStringLazyPreproc(Options& opts, bool value)
166
{
167
    if (!opts.strings.stringLazyPreprocWasSetByUser) opts.strings.stringLazyPreproc = value;
168
}
169
void setDefaultStringLenNorm(Options& opts, bool value)
170
{
171
    if (!opts.strings.stringLenNormWasSetByUser) opts.strings.stringLenNorm = value;
172
}
173
void setDefaultStringLenPropCsp(Options& opts, bool value)
174
{
175
    if (!opts.strings.stringLenPropCspWasSetByUser) opts.strings.stringLenPropCsp = value;
176
}
177
void setDefaultStringMinPrefixExplain(Options& opts, bool value)
178
{
179
    if (!opts.strings.stringMinPrefixExplainWasSetByUser) opts.strings.stringMinPrefixExplain = value;
180
}
181
void setDefaultStringProcessLoopMode(Options& opts, ProcessLoopMode value)
182
{
183
    if (!opts.strings.stringProcessLoopModeWasSetByUser) opts.strings.stringProcessLoopMode = value;
184
}
185
void setDefaultStringRExplainLemmas(Options& opts, bool value)
186
{
187
    if (!opts.strings.stringRExplainLemmasWasSetByUser) opts.strings.stringRExplainLemmas = value;
188
}
189
void setDefaultStringUnifiedVSpt(Options& opts, bool value)
190
{
191
    if (!opts.strings.stringUnifiedVSptWasSetByUser) opts.strings.stringUnifiedVSpt = value;
192
}
193
// clang-format on
194
}
195
196
29577
}  // namespace cvc5::options