blob: e3cb1385135e62389ed80c642f02d85f3df25d9e (
plain)
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
|
/******************************************************************************
* Top contributors (to current version):
* Justin Xu, Abdalrhman Mohamed, Andres Noetzli
*
* This file is part of the cvc5 project.
*
* Copyright (c) 2009-2021 by the authors listed in the file AUTHORS
* in the top-level source directory and their institutional affiliations.
* All rights reserved. See the file COPYING in the top-level source
* directory for licensing information.
* ****************************************************************************
*
* The preprocessing pass super class.
*/
#include "preprocessing/preprocessing_pass.h"
#include "preprocessing/assertion_pipeline.h"
#include "preprocessing/preprocessing_pass_context.h"
#include "printer/printer.h"
#include "smt/dump.h"
#include "smt/output_manager.h"
#include "smt/smt_engine_scope.h"
#include "smt/smt_statistics_registry.h"
#include "util/statistics_stats.h"
namespace cvc5 {
namespace preprocessing {
PreprocessingPassResult PreprocessingPass::apply(
AssertionPipeline* assertionsToPreprocess) {
TimerStat::CodeTimer codeTimer(d_timer);
Trace("preprocessing") << "PRE " << d_name << std::endl;
Chat() << d_name << "..." << std::endl;
dumpAssertions(("pre-" + d_name).c_str(), *assertionsToPreprocess);
PreprocessingPassResult result = applyInternal(assertionsToPreprocess);
dumpAssertions(("post-" + d_name).c_str(), *assertionsToPreprocess);
Trace("preprocessing") << "POST " << d_name << std::endl;
return result;
}
void PreprocessingPass::dumpAssertions(const char* key,
const AssertionPipeline& assertionList) {
if (Dump.isOn("assertions") && Dump.isOn(std::string("assertions:") + key))
{
// Push the simplified assertions to the dump output stream
OutputManager& outMgr = d_preprocContext->getSmt()->getOutputManager();
const Printer& printer = outMgr.getPrinter();
std::ostream& out = outMgr.getDumpOut();
for (const auto& n : assertionList)
{
printer.toStreamCmdAssert(out, n);
}
}
}
PreprocessingPass::PreprocessingPass(PreprocessingPassContext* preprocContext,
const std::string& name)
: d_name(name),
d_timer(smtStatisticsRegistry().registerTimer("preprocessing::" + name))
{
d_preprocContext = preprocContext;
}
PreprocessingPass::~PreprocessingPass() {
Assert(smt::smtEngineInScope());
}
} // namespace preprocessing
} // namespace cvc5
|